糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > C++中虚函数的作用

C++中虚函数的作用

时间:2019-07-29 14:34:10

相关推荐

C++中虚函数的作用

C++中的虚函数的作用主要是实现了多态的机制。基类定义虚函数,子类可以重写该函数;在派生类中对基类定义的虚函数进行重写时,需要再派生类中声明该方法为虚方法。

当子类重新定义了父类的虚函数后,当父类的指针指向子类对象的地址时,[即B b; A a = & b;] 父类指针根据赋给它的不同子类指针,动态的调用子类的该函数,而不是父类的函数(如果不使用virtual方法,请看后面★),且这样的函数调用发生在运行阶段,而不是发生在编译阶段,称为动态联编。而函数的重载可以认为是多态,只不过是静态的。注意,非虚函数静态联编,效率要比虚函数高,但是不具备动态联编能力。

★如果使用了virtual关键字,程序将根据引用或指针指向的对象类型来选择方法,否则使用引用类型或指针类型来选择方法。

下面的例子解释动态联编性:

class A{private:int i;public:A();A(int num) :i(num) {};virtual void fun1();virtual void fun2();};class B : public A{private:int j;public:B(int num) :j(num){};virtual void fun2();// 重写了基类的方法};// 为方便解释思想,省略很多代码A a(1);B b(2);A *a1_ptr = &a;A *a2_ptr = &b;// 当派生类“重写”了基类的虚方法,调用该方法时// 程序根据 指针或引用 指向的 “对象的类型”来选择使用哪个方法a1_ptr->fun2();// call A::fun2();a2_ptr->fun2();// call B::fun1();// 否则// 程序根据“指针或引用的类型”来选择使用哪个方法a1_ptr->fun1();// call A::fun1();a2_ptr->fun1();// call A::fun1();

原文链接:/iFuMI/article/details/51088091

如果觉得《C++中虚函数的作用》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。