1.默认构造函数
定义: 没有显式提供初始化式时调用的构造函数 形式: 没有返回值,没有参数 注意: 默认构造函数可以自己实现,也可以由编译器生成,但编译器只会在必要的时候才会帮程序员合成默认构造函数
两个误解: 1.任何class如果没有定义default constructor,就会被合成出一个来 2.编译器合成出来的default constructor 会显示设定class内每一个data member的默认值
针对第一个误解我们需要了解default constructor的合成时机 针对第二个误解,我们需要知道编译器为我们合成的默认构造干了什么
2.合成时机(什么时候才是必要的时候?) ①:带有Default Constructor 的 Member Class Object 解释: 当一个classA中有一个数据成员为另一个classB类型,并且classB中有自己的默认构造函数时,如果ClassA没有默认构造函数,编译器会为ClassA合成一个默认构造函数. 原因: 当ClassA对象创建时,为了初始化ClassB类型的数据成员,自然会调用ClassB的默认构造函数来初始化ClassB类型的对象,而调用ClassB默认构造函数的操作就需要在ClassA的默认构造函数中进行. 但如果ClassB中没有默认构造函数,则代表ClassB类型的对象默认情况下不需要初始化,所以编译器也就不会在ClassA中合成默认构造 注意: 合成的操作不是一定会发生,只有在constructor真正需要被调用时才会发生.也就是说合成的时机只是合成的必要条件,并不是充分条件.
class B
{
public:
int b;
B()
{
b=0;
}
}
class A
{
public:
int a;
B b;
}
A()
{
this.b();
}
②未完待续
|