Chinaunix首页 | 论坛 | 博客
  • 博客访问: 300061
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类: C/C++

2013-01-27 22:59:08

chapter.7 Classes

1.构造函数后面加 “=default”表示仍然需要编译器提供默认的构造函数,看着清晰么

比如有一个带参数无默认值的构造,那么创建数组时就有点问题,加上后如此:

后面还会讲到加“=delete”表示禁用,比如考构和某运算符等等。


class base
{
public:
	base()=default;
	vector vs={"h","l"};
};
2.类内成员直接初始化,前面出现过,上面的vs,一定要用大括号。


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,编译都会不过。

阅读(299) | 评论(0) | 转发(0) |
0

上一篇:函数相关

下一篇:顺序容器基本相关

给主人留下些什么吧!~~