C++学习笔记:Virtual的使用心得

Virtual是C++中实现多态的关键所在。

Virtual使用的地方有两个地方:

1、类与类之间的虚继承。(主要用于在多继承中出现二义性时)

首先上第一个用处的测试代码:

 

#include <iostream>

using namespace std;

class A

{

    public:

        A(){cout<<"A construction"<<endl;}

        ~A(){cout<<"A disconstruction"<<endl;}

};

class B : virtual public A

{

    public:

        B(){cout<<"B construction"<<endl;}

        ~B(){cout<<"B disconstruction"<<endl;}

};

class C : virtual public A

{

    public:

        C(){cout<<"C construction"<<endl;}

        ~C(){cout<<"C disconstruction"<<endl;}

};

class D : virtual public B,public C

{

    public:

        D(){cout<<"D construction"<<endl;}

        ~D(){cout<<"D disconstruction"<<endl;}

};



int main()

{

    D d;

    return 0;

}

 

这个就是一个典型的多继承中出现二义性的例子。需要加上virtual关键字,否则会执行两次A的构造函数。

2、声明一个函数为虚函数。

声明函数为虚函数有两种形式

第一种:就是直接在前面加上virtual关键字表示一般虚函数,并且需要在该类中对虚函数进行定义,该类可以产生对象。

第二种:是在第一种的基础上在最后面加上“=0”,表示纯虚函数,这种形式不需要进行定义,该类也称为一个抽象类,无法产生对象。只能由子类去继承他并实现虚函数,并创建子类的对象使用。

使用虚函数的好处:提高了程序的扩展性。当父类引用指向子类对象时,使用父类引用调用该方法后,程序会自动检测该引用指向的对象的真实类型,并去调用与之对应的方法,而不会去调用父类的方法。

上代码:

#include <iostream>

using namespace std;

class A

{

    public:

        virtual void test(){cout<<"A test"<<endl;}

};

class B : public A

{

    public:

        void test(){cout<<"B test"<<endl;}

};



int main()

{

    A* a = new B;

    a->test();

    return 0;

}

 

如果不加virtual关键字,打印结果为A test。加上之后打印结果是B test

你可能感兴趣的:(virtual)