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

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的构造函数体内就报错?
初始化成员数据时写在构造函数的初始化区和函数体内有什么区别呀?
...全文
46 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
上面的错误是笔误。快结帖了,谢谢大家指教

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧