C++——委托构造函数

本文介绍了C++11引入的委托构造函数特性,通过示例展示了如何使用委托构造函数简化类的初始化过程。在Sales_data类的重写中,各种构造函数都委托给一个主要的构造函数进行初始化,提高了代码的简洁性和一致性。同时,文章通过NoDefault类和A、B结构体的例子说明了没有默认构造函数的情况及其影响。

C++11标准扩展了构造函数初始值的功能,使我们可以定义委托构造函数。一个委托构造函数使用它所属类的其他构造函数执行自己的初始化过程被称为委托构造。

和其他构造函数一样,一个委托构造函数也有一个成员初始值的列表和一个函数体。在委托构造函数内,成员初始值列表只有一个唯一入口,就是类名本身。和其他成员初始值一样,类名后面紧跟圆括号括起来的参数列表,参数列表必须与类中另外一个构造函数匹配。

我们使用委托构造函数重写Sales_data类,重写后的形式:

class Sales_data {
public:
    // 非委托构造函数使用对应的实参初始化成员
    Sales_data(std::string s, unsigned cnt, double price):
        bookNo(s), units_sold(cnt), revenue(cnt*price) { }
    // 其余构造函数全都委托给另一个构造函数
    Sales_data(): Sales_data("", 0, 0) {}
    Sales_data(std::string s): Sales_data(s,0,0) {}
    Sales_data(std::istream &is): Sales_data()
                                { read(is, *this); }
};
class NoDefault {
public:
    NoDefault(const std::string&);
    //还有其他成员,但是没有其他构造函数
};
struct A {
    NoDefault my_mem;
};
A a;        //错误: 不能为A合成构造函数
struct B {
    B() {}  //错误: b_member没有初始值
    NoDefault b_member;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值