盛名时刻表2017手机:一个关于C++函数覆盖问题, 请高人指点~先谢了

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/27 21:44:40
以下是程序:
#include<iostream.h>
class Base
{
public:
Base()
{
cout<<"base class"<<endl;
fun();
}
void fun(){cout<<"fun of base"<<endl;}
};

class Derive:public Base
{
public:
Derive()
{
cout<<"derive class"<<endl;
fun();
}
void fun(){ cout<<"fun of derive"<<endl;}
};

void main()
{
Derive d;
}

输出结果是:
base class
fun of base
derive class
fun of derive

我想问一下为什么第二行输出的是:fun of base?
Derive类的fun函数不是已经把base类的fun函数给覆盖了吗?
小弟真的想不通,请高人指教,谢谢啦~!

这个不能说是覆盖
覆盖指的是在同一个类里参数不同的同名函数
像你的Base和Derive,虽然Derive继承自Base,Derive里也有Fun();但Derive初始化时会调用Base的构造类数
而Base的构造函数又调用Fun(),注意这个Fun(),是Base自已的。因为它是父类,看不到子类的函数。所以会是这样,呵呵
另外,你应该看看多态,我看你把它们弄混了