分类: C/C++
2013-01-27 22:59:08
chapter.7 Classes
1.构造函数后面加 “=default”表示仍然需要编译器提供默认的构造函数,看着清晰么
比如有一个带参数无默认值的构造,那么创建数组时就有点问题,加上后如此:
后面还会讲到加“=delete”表示禁用,比如考构和某运算符等等。
class base { public: base()=default; vector2.类内成员直接初始化,前面出现过,上面的vs,一定要用大括号。vs={"h","l"}; };
3.委托构造函数(delegating constructor),一个构造函数冒号语法调用另一个构造函数,直接贴书里的好了
class Sales_data { public: // nondelegating constructor initializes members from corresponding arguments Sales_data(std::string s, unsigned cnt, double price): bookNo(s), units_sold(cnt), revenue(cnt*price) { } // remaining constructors all delegate to another constructor 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); } // other members as before };4.constexpr的构造函数。说是用在接受constexpr参数或返回值的函数,不是很了啊
前面讲过constexpr函数只能严格有一条(return)语句,但构造函数又没有return,综合起来后的限制:
constexpr构造函数函数体必须为空,且必须用冒号语法为每一个数据成员进行初始化。
class base { public: constexpr base():i(3),i2(3){}//{cout<<"in cons i:"<
如果把i2的初始化去掉或者函数体内加一条cout,编译都会不过。