什么函数不能声明为虚函数?举3个例子说明
共 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;}
评论
