virtual 的用法

先看一段代码:

#include <stdio.h>

class Parent{
public:
    void Test(){
        printf("parent Test");
    }
};
class Child{
public:
    void Test(){
        printf("Child Test");
    }
};

void main(){
    Child  ch;
    ch.Test();
}

很明显这里将调用子类的Test, 因为子类重写了父类的办法。但如果我们仍然要调用父类的Test 该怎么办?

第一个办法是我们可以直接实例一个父类对象调用Test 。

第二个办法是用个父类指针指向一个之类对象调用Test ,从本质上讲子类的前半部分就是父类所以可以这样用。

Parent * ch = new Child();
    ch->Test();    

因为ch指向一个Child对象按照调用者本意我们希望调用子类的Test ,那么这时应该怎么办?

这就要提到虚拟继承virtual,当一个成员函数需要被子类重写时就可以在函数前声明virtual,此时,如果Test()在父类中被声明为virtual,是调用的是子类的Test()。这解释了virtual的作用:根据对象的实际类型,调用相应类型的函数。

virtual void Test(){
        printf("parent Test");
    }

这如果重写的时候,还是要嵌入调用一下父类的函数,怎么办?

void Child::Test()
{
    Parent::Test(); // 显式地调用父类的函数
}

 

 

 

 

 

 

posted @ 2017-03-04 18:12  rimonzheng  阅读(645)  评论(0编辑  收藏  举报