哪位C++高手帮帮忙?帮我看看下面这道题 由于我的C++水平很低,所以希望是详解答案 谢谢了。

#include <iostream>
using namespace std;
class Base{
public:
Base(int x=0) {cout<<x;}
};
class Derived : public Base{
public:
Derived(int x=0) {cout<<x;}
private:
Base val;
};
int main(){
Derived d(1);
return 0;
}

结果:001
Derived 继承Base,Derived d(1)先调用基类的构造函数,输出一个0,由于基类有一个 Base val的对象,又一次调用基类的构造函数,输出第二个0,最后调用 Derived(int x=0) {cout<<x;},输出1
继承关系的构造函数的调用顺序:先调用基类构造函数-》再调用派生类;析构函数则相反追问

Base val是在派生类终生定义的也可以吗? 还有基类的构造函数(函数体)是什么呀?
谢谢了

追答

可以定义的,基类的构造函数(函数体)就是Base(int x=0) {cout<<x;}

追问

那为什么d(1)中的实参没有传递到Base(int x=0) {cout<<x;}
中的x呀?
谢谢

追答

你没有初始化Base(int x=0)构造函数,Derived(int x=0):Base(x) {cout<<x;}这样就传递了

追问

怎么样才能实现d(1)中的实参传递到Base(int x=0) {cout<<x;}
中的x呀,是通过指针吗?
谢谢哦。

追答

你要初始化基类的构造函数呀,这样就传递咯,声明对象或指针都可以啊,刚不是说了吗
Derived(int x=0):Base(x) {cout<<x;}这样就初始化了基类构造函数的形参了,和你刚写的那个构造函数不一样吧 Derived(int x=0) {cout<<x;}

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-09
继承类的构造函数没有为基类的构造函数传递初始值。
相似回答
大家正在搜