读书人

C++在已经有构造函数时运用默认构造

发布时间: 2012-09-11 10:49:03 作者: rapoo

C++在已经有构造函数时,使用默认构造函数

1.无关紧要(trivial)的默认构造函数【无用构造函数】

《The C++ ARM》告诉我们:“默认构造函数会在需要的时候自动生成(被编译器)。”然后“在需要的时候”是一个很抽象的概念,本文主要描述的问题也正是这些需要的情况。我们看看下面的代码片段:


在这个程序片段中Bar的成员foo含有默认构造函数,它初始化自己的类成员_i为1而Bar本身并没有定义默认的构造函数,这个构造函数的目的是为了初始化它的成员变量foo,实际上就是调用Bar::foo的默认构造函数,但它并不会做一丁点关于另外一个变量str的初始化和赋值工作,初始化Bar::foo是编译器的责任,二初始化str是程序员的责任。

我们可以用以下代码来大致描述一下编译器的工作:


===========================================以上为编译器生成(有用)默认构造函数======================================================

特别注意:以下所有情况均为把有参构造函数使用成无参构造函数,创建对象方式与默认构造函数相同,但意义不一样。以下是在声明时成成员初始化为0,则调用函数形式与默认构造函数相同。

父类无构造函数(有编译器自己创建的trival型的),子类已经有有参构造函数。

如果是


2.2.2父类含有用户自定义的无参构造函数或者有参构造函数。

基类含无参构造函数,子类已经有有参构造函数,也能为子类生成默认构造函数。

基类含有参构造函数


对于基类含有虚函数和抽象类也和上面所说的情况一致。例:


读书人网 >C++

热点推荐