c++ 虚函数

来源:互联网 发布:linux保存文件并退出 编辑:程序博客网 时间:2024/06/13 19:49

虚继承


如果不是虚函数,就直接根据指针类型(父类指针、子类指针,)来确定调用子类还是父类的方法,与实际指针指向的对象是父类还是子类无关

如果是虚函数,就调用实际指向内存对象的方法,不论指针类型


c++重载、覆盖、隐藏的区别和执行方式:

转自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/05/2537451.html

既然说到了继承的问题,那么不妨讨论一下经常提到的重载,覆盖和隐藏
4.1成员函数被重载的特征
(1)相同的范围(在同一个类中); 
(2)函数名字相同; 
(3)参数不同; 
(4)virtual 关键字可有可无。 
4.2“覆盖”是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类); 
(2)函数名字相同; 
(3)参数相同; 
(4)基类函数必须有virtual 关键字。 
4.3“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,特征是:

(1)如果派生类的函数与基类的函数同名,但是参数不同,此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 
(2)如果派生类的函数与基类的函数同名,但是参数相同,但是基类函数
没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

小结:说白了就是如果派生类和基类的函数名和参数都相同且

用了virtual

,属于覆盖,这是可以理解的吧,完全一样当然要覆盖了;

如果只是函数名相同,参数并不相同,则属于隐藏

覆盖就只有一种情况:

派生类和基类的函数名和参数都相同且

用了virtual

4.4 三种情况怎么执行:

4.4.1 重载:看参数。

4.4.2 隐藏:用什么就调用什么。转成父类类型的指针就用父类的方法,转成子类类型的指针就用子类的方法,子类隐藏了父类的函数,子类指针就无法调用父类的方法了,直接编译错误

4.4.3 覆盖:调用派生类。


0 0
原创粉丝点击