委托构造函数

委托构造函数
C++11新标准扩展了构造函数初始值的功能,使得咱们能够定义所谓的委托构造函数。一个委托构造函数使用它所属类的其余构造函数执行它本身的初始化过程,或者说它把它本身的一些(或者所有)指责委托给了其余构造函数。
和其余构造函数同样,一个委托构造函数也有一个成员初始值的列表和一个函数体。在委托构造函数体内,成员初始值列表只有一个惟一的入口,就是类名自己。和其余成员初始值同样,类名后面紧跟圆括号括起来的参数列表,参数列表必须与类中另一个构造函数匹配。
举个例子,咱们使用委托构造函数重写Sales_data类,重写后的形式以下所示:函数

class Sales_data{
public:
//非委托构造函数使用对应的实参初始化成员
Sales_data(std::string s,unsigned cnt,double price):bookNo(s),units_sold(cnt),revenue(price*cnt){}this

//其他构造函数全都委托给另外一个构造函数
Sales_data():Sales_data("",0,0){}string

Sales_data(std::string s):Sales_data(s,0,0){}it

Sales_data(std::istream &is):Sales_data()
{
read(is,*this);
}class

//其余成员与以前的版本一致stream

};扩展

在这个Sales_data类中,除了一个构造函数外其余的都委托了他们的工做。第一个构造函数接收三个实参,使用这些实参初始化数据成员,而后结束工做。咱们定义默认构造函数令其使用三参数的构造函数完成初始化过程,它也无需执行其余任务,这一点从空的构造函数体能看出来。接受一个string的构造函数一样委托给了三参数的版本。
接收istream&的构造函数也是委托构造函数,它委托给了默认构造函数,默认构造函数又接着委托给三参数构造函数。当这些受委托的构造函数执行完后,接着执行istream&构造函数体的内容。它的构造函数体调用read函数读取给定的istream。
当一个构造函数委托给另外一个构造函数时,受委托的构造函数的初始值列表和函数体被依次执行。在Sales_data类中,受委托的构造函数体刚好是空的。假如函数体包含有代码的话,将先执行这些代码,而后控制权才会交还给委托者的函数体。构造函数

相关文章
相关标签/搜索