C++_多态以及其注意事项

1、虚函数、覆盖以及多态的概念

1)class 基类 {

          virtual 返回类型 函数名 (形参表) [const] { ... }
    };
    的成员函数,称为虚函数或方法。

2)覆盖

如果子类的成员函数和基类的虚函数具有“相同”的函数原型,那么该成员函数就也是虚函数,无论其是否带有virtual关键字,且对基类中的虚函数构成覆盖。
class 子类 : public 基类 {
    [virtual] 返回类型 函数名 (形参表) [const] { ... }

};

3)多态
如果子类提供了对基类虚函数的有效覆盖,那么通过一个指向子类对象的基类指针,或者引用子类对象的基类引用,调用该虚函数,实际被调用的将是子类中的覆盖版本,而非基类中的原始版本,这种语法现象谓之多态。
 

4)覆盖的条件
A.必须是非静态的成员函数,但是构造函数除外;
B.必须在基类中用virtual关键字声明其为虚函数;
C.子类中的覆盖版本和基类中的原始版本,函数原型(返回类型+函数名+形参表+常属性)必须“相同”;
D.如果基类中的虚函数返回的是某个类类型的指针或者引用,那么该虚函数在子类中的覆盖版本,也可以返回基类版本所返回的指针或者引用的类型的子类的指针或者
引用————类型协变
E.覆盖的条件与访问控制属性无关。
 

5)多态的条件
A.虚函数和有效覆盖
B.通过指针或者引用调用虚函数

C.在基类的构造和析构函数中调用虚函数,没有多态性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值