在子类的构造函数中调用父类的构造函数的疑惑? 大家来看看

zsc0797 2004-03-05 12:58:59
class A
{
private:
int iData;
public:
A() : iData(0) {}
A(int i) : iData(i) {}
};
class B: public A
{
private;
double dData;
public:
B(double d, int i) : dData(d) : A(i){}
}

难道A(i) 一定要写在初始化区吗, 为什么写在B的构造函数体内就报错?
初始化成员数据时写在构造函数的初始化区和函数体内有什么区别呀?
...全文
18 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gaowenjun233 2004-03-17
B(double d, int i) : dData(d) ,A(i){}
回复
b_horse 2004-03-16
从什么的程序,我们可以看到基类的初始化未必要在初始化表中进行;但必须承认的是,基类的缺省构造函数会在其它的动作进行之前被调用,而这一点是强制性的,即使你explicit在函数中调用了该基类的缺省构造函数。
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
class A
{
private:
int iData;
public:
A() : iData(0)
{
cout << "A()" << endl;
}
A(int i) : iData(i)
{
cout << "A(int i)" << endl;
}

void print() const
{
cout << iData << endl;
}
};

class B: public A
{
private:
double dData;
public:
B(double d, int i) : dData(d)
{
cout << dData << endl;
this->A::A();
this->A::A(i);
cout << dData << endl;
}
void print() const
{
cout << dData << endl;
A::print();
}
};

main()
{
B b(1.0,100);
b.print();
}
回复
b_horse 2004-03-16
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
class A
{
private:
int iData;
public:
A() : iData(0) {}
A(int i) : iData(i) {}
void print() const
{
cout << iData << endl;
}
};

class B: public A
{
private:
double dData;
public:
B(double d, int i) : dData(d)
{
this->A::A(i);
}
void print() const
{
cout << dData << endl;
A::print();
}
};

main()
{
B b(1.0,100);
b.print();
}
回复
zsc0797 2004-03-15
上面的错误是笔误。快结帖了,谢谢大家指教
回复
相关推荐
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2004-03-05 12:58
社区公告
暂无公告