C++动态绑定及继承

在C++中,通过基类的引用(或指针)调用虚函数,发生动态绑定。引用(或指针)既可以指向基类对象,也可以指向派生类对象。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。

除了构造函数,任意非static成员函数都可以是虚函数。保留字virtual只能在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上。

派生类中虚函数的声明必须与基类中的定义方式相匹配,但有一个例外:返回对基类型的引用(或指针)的虚函数。

派生类重定义虚函数时,可以使用virtual保留字,但不是必须这样做。

C++的函数调用默认不使用动态绑定,要触发动态绑定,必须满足两个条件:

1.只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定。

2.必须通过基类型的引用或指针进行函数调用。

友元关系不能继承。如果基类被授予友元关系,则只有基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类。

构造函数和复制控制

1.派生类的合成默认构造函数除了初始化派生类的数据成员外,还需要初始化派生对象的基类部分,基类部分由基类的默认构造函数初始化。

2.一般的情况下,派生类应通过使用基类构造函数尊重基类的初始化意图,而不是在派生类构造函数函数体中对这些成员赋值。

3.如果派生类显式定义自己的复制构造函数或赋值操作符,则该定义将完全覆盖默认定义。被继承类的复制构造函数和赋值操作符负责对基类成分以及类自己的成员进行复制或赋值。

4.构造函数和复制控制成员不能继承,每个类定义自己的构造函数和复制控制成员,所以构造函数不能定义为虚函数,最好也不将赋值操作符定义为虚函数,而析构函数应定义为虚函数。


含有(或继承)一个或多个纯虚函数的类是抽象基类,除了作为抽象基类的派生类的对像的组成部分,不能创建抽象类型的对象。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值