示例代码:
//===========main.cpp===========
class Position
{
private:
int x;
int y;
int z;
public:
Position() : x(0), y(0), z(0)
{
}
Position(int x, int y, int z) : x(x), y(y), z(z)
//从初始化列表中元素的形式上可以看出,元素使用直接初始化的方式初始化指定变量,所以在初始化列表中的元素如“x(x)”表达式中,小括号外的x是被初始化的变量,小括号内的x是初始值。
// “x(x)”表达式中两个标识符的名称虽然都是x,但却是两个层面的概念,所以两者在这种情况下并不属于变量名重名。
{
}
};
class Rotate
{
private:
int xr;
int yr;
int zr;
};
class Color
{
private:
int red;
int green;
int blue;
public:
Color() : red(0), green(0), blue(0)
{
}
Color(int r, int g, int b) : red(r), green(g), blue(b)
{
}
};
class Shape
{
protected:
int length;
int width;
public:
Shape() : length(0), width(0)
{
}
Shape(int len, int w) : length(len), width(w)
{
}
};
class Box : public Shape
{
private:
int flag;
int hight;
int weight;
Position pos;
Rotate angle;
Color color;
int data[5];
public:
Box();
};
Box::Box() : Shape(), hight(), weight(0), pos(1, 2, 3), angle(), color{104, 105, 106}, data{11, 12, 13, 14, 15}
//初始化列表中:
// 元素“Shape()”调用了父类的默认构造函数;
// 成员变量“flag”没有在初始化列表中显式初始化,会执行直接初始化之中的默认初始化;
// 元素“hight()”使用了初始化器却没有提供初始值,会执行直接初始化之中的值初始化;
// 元素“weight(0)”会执行直接初始化。又因为其数据类型为基本类型,所以会初始化为指定的初始值0;
// 元素“pos(1, 2, 3)”会执行直接初始化。又因为其数据类型为类,所以会调用匹配的构造函数进行初始化;
// 元素“angle()”使用了初始化器却没有提供初始值,且数据类型为类,该类只有编译器生成的默认构造函数,会执行直接初始化之中的值初始化,先将成员变量初始化为默认值0,再调用编译器生成的默认构造函数;
// 元素“color{104, 105, 106}”使用了C++11支持的initializer list,且数据类型为类,会调用匹配的构造函数进行初始化;
// 元素“data{11, 12, 13, 14, 15}”使用了C++11支持的initializer list,且数据类型为聚合类型,会进行聚合初始化。具体到数组的每个元素,进行的是直接初始化;
{
length = 200; //赋值
width = 100; //赋值
}
int main()
{
Box box;
return 0;
}
//======================
更多相关内容可以查看我的另一篇文章:
ERIZEIUM:C语言、C++、Windows链接库重点归纳系统总结思维导图笔记