什么函数不能声明为虚函数?举3个例子说明

杨数Tos

共 1708字,需浏览 4分钟

 ·

2024-07-03 21:15

大家好,我是贤弟!
以下类型的函数不能声明为虚函数:

静态函数:静态函数是属于类的函数,但是静态函数不依赖于任何类的实例,因此不能被声明为虚函数。
class MyBaseClass {public:    static void myStaticMethod() { // 静态函数        std::cout << "静态函数" << std::endl;    }    virtual void myVirtualMethod() { // 虚函数        std::cout << "虚函数" << std::endl;    }};

int main() { MyBaseClass::myStaticMethod(); // 调用静态函数,与对象无关 MyBaseClass *obj = new MyBaseClass(); obj->myVirtualMethod(); // 调用虚函数 return 0;}
内联函数:内联函数在编译时直接将代码插入到调用处,以替代函数调用。由于虚函数需要在运行时进行动态绑定,因此不能将其声明为内联函数。
class MyBaseClass {public:    inline void myInlineMethod() { // 内联函数        std::cout << "内联函数" << std::endl;    }    virtual void myVirtualMethod() { // 虚函数        std::cout << "虚函数" << std::endl;    }};

int main() { MyBaseClass *obj = new MyBaseClass(); obj->myInlineMethod(); // 调用内联函数 obj->myVirtualMethod(); // 调用虚函数 return 0;}
非成员函数:虚函数是属于类的成员函数,因此不能将非成员函数声明为虚函数。
class MyBaseClass {public:    virtual void myVirtualMethod() { // 虚函数        std::cout << "虚函数" << std::endl;    }};

void myFunction(MyBaseClass *obj) { // 非成员函数 obj->myVirtualMethod(); // 调用虚函数}

int main() { MyBaseClass *obj = new MyBaseClass(); myFunction(obj); // 调用非成员函数 return 0;}


浏览 13
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报