一个c++的问题, 分析下运行结果

来源:百度知道 编辑:UC知道 时间:2024/06/24 06:10:47
#include <iostream>
using namespace std;
class Base
{
public:
Base(){cout<<"BB";f();}
void f(){cout<<"Bf";}
};
class Derived:public Base
{
public:
Derived(){cout<<"DD";}
void f(){cout<<"Df";}
};

int main(){Derived d;return 0;}

编译时有一个错误
分析运行结果,谢谢。

代码没错啊

结果:BBBfDD

首先执行main函数。
Derived d;
先执行基类的构造函数Base();
输出BBBf;
再执行派生类的构造函数Derived();
输出DD;

BBBfDD
构造函数 你去看下 Thinking in 这本书 就知道了

编译没有问题,可能是你的VC有问题。
结果:BBBfDD

用vs2005运行了一下,没有发现编译错误。不过为了看结果在return前加了cin,结果为BBBfDD.符合原先的判断,分析:首先,派生类会将基类成员全盘接受。你的基类中只有一个构造函数,在申明对象后自动调用了base()。base()中又调用了base的f(),所以就出现了BBBf;其次,派生类会改造基类,如何改造呢?它会对基类数据或成员进行覆盖,比如你将函数改成Derived(){cout<<"DD";f()}这时候就会输出BBBfDDDf了,这点你可以自己试一下。第三就是派生类会添加新的成员,Derived()就是一个新的成员了,他对于类Derived来说是一个唯一的而且不用参数的构造函数,可以说程序默认的调用函数,最后的输出自然是BB了,你所不懂地是不是这里呢?