c++ 多态

28 篇文章 0 订阅
14 篇文章 0 订阅

多态公有继承:

1. 在派生类中重新定义基类的方法

2. 使用虚方法

如果要在派生类中重新定义基类的方法,通常应将基类方法声明为虚的。这样,程序将根据对象类型而不是引用或者指针的类型来选择方法版本。为基类声明一个虚析构函数也是一种惯例。

3. 非构造函数不能使用成员初始化列表的方法。

4. 派生类方法中调用基类同名方法,基类方法需要使用作用域解析符来限定。如果不是同名,则不必使用作用域解析符。

5. 公有继承模型下,基类指针既可以指向基类对象,也可以指向派生类对象。因此可以创建一个基类的指针数组,其中的指针既可以指向基类对象,又可以指向派生类对象,实现了多态。

6. 析构函数为虚的重要性:如果析构函数非虚,释放对象时调用指针类型的析构函数;如果析构函数为虚,则调用被指向对象类型的析构函数。

7. 静态联编和动态联编。编译过程中进行联编是静态联编,程序运行时能够正确选择选择代码的联编是动态联编,主要是虚函数的动态联编。编译器对非虚函数进行静态联编,对虚函数使用动态联编。静态联编的效率高,动态低。如果要在派生类中重新定义基类的方法,则将它设置为虚方法,否则设置为非虚。

8. 基类指针或引用可以直接指向派生类对象;派生类指针或引用不可以指向基类对象,必须采用显示转换。当函数的形参是基类对象,实参为派生类对象时,只将派生类对象中基类内容传递给基类对象。

9. 使用虚函数的成本:(1)每个对象都将增大,增大量为存储地址的空间;(2)对于每个类,编译器都将创建个虚函数地址表;(3)对于每个虚函数调用,都要执行一项额外的操作,即到表中查找地址。

10. 构造函数不能是虚函数;析构函数一般要写成虚函数;友元函数不能是虚函数,因为只有成员函数才能是虚函数。

11. 派生类重新定义继承的方法,应确保与基类中的方法原型相同,如果参数不同,并不会构成重载,反而会报错;但如果返回基类函数的返回类型为基类的引用或者指针,则派生类中的方法可修改为返回派生类的指针或引用,也可以不修改。如果基类方法在基类声明中被重载了,则在派生类中如果要重新定义这些函数时,应该对上述重载的函数都进行重新定义,否则没有被重新定义的重载函数会被屏蔽。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值