知识点2:当构造函数委托给另一个构造函数时,受委托的构造函数的初始值列表及其函数体先被执行,接着才会执行到委托函数的函数体。
class OH{OH(string s, int a, int b):book(s),price(a),sale(b){cout<<"OH(string s, int a, int b)"<<endl;} //三参数构造函数的参数列表和函数体首先被执行OH():OH(" ",0,0);//默认构造函数又委托给了三参数构造函数OH (istream& is):OH(){cout<<"OH (istream& is)"<<endl;}//OH (istream& is)是一个委托构造函数,它委托给了默认构造函数OH()string book;int price;int sale;};PS:41、42知识点为C++11特性
1:当类的作用域内不需要使用任何初始值定义非静态变量时 2:当类中含有需要使用默认构造函数当作被委托构造函数时 3:类的成员没有在构造函数初始值列表中显示初始化时 知识点2:当类中定义了其它类型的构造函数时,最好提供一个默认的构造函数,养成良好的习惯。 知识点3:类声明对象是不需要加括号!加括号是声明函数的。
OH oh();//不合法的实例化OH oh;//合法(a):错误,类本身不提供构造函数时,编译器会自动合成一个默认构造函数 (b):错误,为成员提供默认值的构造函数也成为默认构造函数 (c):错误,见43题知识点1 (d):错误,当类没有定义构造函数时,才会默认编译器生成默认构造函数。
知识点2:通过一个实参调用的构造函数定义了一条从构造函数的参数类型向类类型隐式转换的机制 知识点3:可以将构造函数声明为explicit加以限定该类型转换
优缺点:这样的隐式类型转换只能作用于单参数的构造函数,但是相较于两步的显示转换,这样的隐式转换则会省去很多麻烦
因为皆显示地声明了属于Salesdata类
(a)合法 (b)不合法,Salesdata&类型与Salesdata类型之间不可转换 (c)不合法,const不对,因为combine本身是需要改变传入参数的
新闻热点
疑难解答
图片精选