2016-11-17 32 views
1

我一直在继承的背景下与构造函数的概念挣扎。这个混淆因为使用C + 11引入了这个主题的巨大变化(即基础构造函数可以被继承?)而变得更加复杂了。继承链是否创建构造函数调用链?

所以我的问题:

假设我不使用构造继承,但只是在我的派生类中定义一个新的构造,并基本构造仍然被调用?这似乎不应该,但我遇到了一些文件,说明这确实发生。此外,这是否意味着当你有一个继承链时,会有一系列的构造函数被调用?如果是这样,按什么顺序?基础派生之前,还是派生基础之前?

谢谢!

+0

除非你调用'super()',我相信答案是_no_。 –

+1

@EricM。对于'super()',答案仍然是否定的,因为它不会编译 –

+0

LOL!我知道它在java中工作...我是60%,也许70%确定它在C++中工作。 TIL。 –

回答

2

这里是为了:

这里的衍生实例化时实际发生的事情:

  1. 内存派生的预留(足够基准站和 衍生部分)
  2. 适当的Derived构造函数被称为
  3. Base对象首先使用适当的Base构造函数构造。如果未指定基础构造函数,则将使用默认的构造函数 。
  4. 初始化列表初始化变量
  5. 的构造函数体执行
  6. 控制返回给调用者

希望它能帮助。

+1

你能解释第2步和第3步吗?在第2步说它是派生的构造函数被调用,然后在第3步中它说'基础对象是使用适当的基础构造函数首先构造的。什么叫第一? – Izzo

+0

据我所知,在派生的构造函数可以做任何事情之前,首先调用Base构造函数。 Base构造函数设置对象的Base部分,将控制返回给Derived构造函数,并允许Derived构造函数完成其作业。 – GAVD

+0

第2步和第5步有什么区别?如果构造函数没有执行它的正文,这意味着什么呢? – Barmar