c++虚继承与虚函数

学习继承与多态时看到这两个概念,记录整理。

虚继承与虚函数都是用virtual关键字实现,虚继承为了防止多重继承,而虚函数为了实现多态。

是几个例子。

虚继承:

class A{};
class B: virtual class A{};
class C: virtual class A{};
class D: class B, class C{};
//如果不使用virtual关键字,classD会继承两次classA

虚函数:

多态利用基类的指针句柄或引用句柄实现。

利用virtual函数,调用的函数就由句柄所指向的对象类型决定,而非句柄类型,从而实现多态,消除switch逻辑。

基类中的虚函数在子类中仍然保持是虚函数,无论重写是是否声明,但声明virtual可以使程序逻辑更清晰,增加可读性。

class A{
    virtual int a(){}
};

class B:class A{
    virtual void a(){}
};
class C:class A{
    virtual void a(){}
};
//子类中对基类成员函数实现重写
int main()
{
B b;
C c; A
* aPtr = &b; aPtr->a();//调用B的成员函数a() aPtr = &c; aPtr->a();//调用C的成员函数a() }

如果基类的析构函数也是虚函数的话,在显式的通过指向该对象的基类指针进行delete操作后,会调用基类的析构函数。如果一个类含有virtual函数,那么就要提供一个virtual析构函数。

而构造函数不能是virtual函数。

posted @ 2019-03-17 11:44  没有窗户的小巷  阅读(675)  评论(0编辑  收藏  举报