参数化列表父类构造函数的问题

jia_xiaoxin 2008-07-28 01:57:49
在C++中每当子类实例化时会默认先调用父类的构造函数。可是我遇到这样的构造函数参数化列表

class HawaiianPizzaBuilder : public PizzaBuilder
{
public:
HawaiianPizzaBuilder() : PizzaBuilder() {}
~HawaiianPizzaBuilder(){}


为什么要显示执行父类的构造函数呢?
请赐教.
...全文
285 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

class CA {
public:
CA() { cout << "using ca's constractor\n"; }
CA(int k) {cout << "using ca's 2nd constractor, k is " << k << endl; m = k;};
virtual ~CA() { cout << "using ca's disconstractor\n"; }

void output() { cout << "the m is " << m << endl; }
private:
int m;
};

class CB : public CA {
public:
CB(int k) { m = k; }
};


这样是不对的,因为m是private的,不能直接访问,所以必须写成

class CB : public CA {
public:
CB(int k) : CA(k) {}


这是一种是用的情况。可能还有别的情况吧,如果有就分享
jia_xiaoxin 2008-07-28
  • 打赏
  • 举报
回复
谢谢各位
对于fetag的回答
如果将Derived() : Base()一句改为Derived(),也就是不要在初始化列表中初始化Base类,得到的是同样的结果,我就是想问为什么非要加上呢?
独孤过儿 2008-07-28
  • 打赏
  • 举报
回复
如果基类里面有一个显示写的“默认构造函数”,而在这个函数内执行一些特殊的操作,用以改变编译器提供的默认构造函数的行为,就要这样调

用了,如下的代码:


#include <iostream>
using namespace std;

class Base
{
public:
Base()
{
cout << "Do some spatial operation!" << endl;
}
};

class Derived : public Base
{
public:
Derived() : Base()
{
cout << "Derived Constructor!" << endl;
}
};

int main()
{
Derived dr;
return 0;
}
Gob00st 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fireseed 的回复:]
一般来说是没必要的,除非是要显示调用父类的有参构造。
[/Quote]
jay的Fans 2008-07-28
  • 打赏
  • 举报
回复
那就可能是那个父类中定义了重载的构造函数!
wjb_yd 2008-07-28
  • 打赏
  • 举报
回复
因为父类成分也是子类对象的一部分,既然你都把新定义的成员初始化了,为什么不把从父类继承来的成员也初始化么,都是成员嘛!
e_sharp 2008-07-28
  • 打赏
  • 举报
回复
如果没有默认构造函数,就必须显示调用
Cpp权哥 2008-07-28
  • 打赏
  • 举报
回复
确实没有必要。
laiwing 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 jia_xiaoxin 的帖子:]
在C++中每当子类实例化时会默认先调用父类的构造函数。可是我遇到这样的构造函数参数化列表

class HawaiianPizzaBuilder : public PizzaBuilder
{
public:
HawaiianPizzaBuilder() : PizzaBuilder() {}
~HawaiianPizzaBuilder(){}


为什么要显示执行父类的构造函数呢?
请赐教.
[/Quote]

你是不是想说HawaiianPizzaBuilder() 后为什么加 PizzaBuilder() 吧
机智的呆呆 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangdeqie 的回复:]
父类有默认的构造函数,就不用显式调用,如果没有就得显式调用父类的构造函数
[/Quote]
wangdeqie 2008-07-28
  • 打赏
  • 举报
回复
父类有默认的构造函数,就不用显式调用,如果没有就得显式调用父类的构造函数
fireseed 2008-07-28
  • 打赏
  • 举报
回复
一般来说是没必要的,除非是要显示调用父类的有参构造。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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