C++学习笔记_10_ 构造函数初始化式

一、再探构造函数

1 构造函数体初始化列表

与其他函数一样,构造函数具有名字、形参表和函数体,与其他函数不同的是,构造函数还可以包含一个构造函数初始化列表:
如下:

class Time
{
    
    
public:
 	Date(int hour, int minute, int second)
 		: _hour(hour)
 		, _minute(minute)
 		, _second(second)
 	{
    
    }
 
private:
 	int _hour;
 	int _minute;
 	 int _hour;
};

在许多类中,初始化和赋值都是低效率的:数据成员可能已经被直接初始化了,还要对他进行初始化和赋值。比效率更重要的是:

  1. 引用成员变量
    • const成员变量
    • 自定义类型成员(该类无默认构造函数)

以上必须初始化,因此使用构造函数初始化列表可以避免许多编译错误。

2 成员初始化次序

  • 每个成员在构造函数初始化列表中只能指定一次,造函数初始化列表仅指定用于初始化成员的值,并不指定这些初始化执行的次序。

例如:(再考虑)

class x{
    
    
	int i;
	int j;
public:
 x(int val)
 :j(val)
 ,i(j)
 {
    
    }
}

看似是 val初始化j,j初始化i,实际上先初始化i,此时j的值为随机值,再初始化j时,已经跟i没有关系了。
因此,尽可能避免用一个成员初始化另一个成员,如遇到上述条件,那成员初始化次序至关重要。

3 初始化式可以是任意表达式

猜你喜欢

转载自blog.csdn.net/kris_paul/article/details/115409641