C++构造函数初始化列表的使用

示例代码:

//===========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链接库重点归纳系统总结思维导图笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值