您的位置:首页 > 编程语言 > C语言/C++

C++11特性--作用域内枚举,显式转换符,类内成员初始化

2013-07-24 00:21 309 查看
1.作用域内枚举

C++11新增了一种枚举。这种枚举使用class或struct定义:

*新枚举要求进行显式限定,以免发生名称冲突

*作用域枚举不能隐式地转换为整型

Example:

enum class animal

{

sun,cat,dog

};



int main()

{

animal mycat=animal::cat;

//int var=mycat;//error,cannot convert 'animal' to 'int' in initialization

int var=int(mycat);//ok 显式转换

cout<<var<<endl;//1

return 0;

}

2.显式转换符

C++11扩展了explicit用法,使得explicit可应用于转换函数

Example:

class A

{

public:

A(int i):x(i)

{

}

explicit operator int()

{

return x;

}

private:

int x;

};

int main()

{

A a(1);

//cout<<a+1;//error, no match for 'operator+' in 'a + 1'

cout<<int(a)+1;//2 ok,显式转换

return 0;

}

3.类内成员初始化

*可以使用=或大括号的初始化,但不能使用圆括号版本的初始化。

*使用类内初始化,可避免在构造函数中编写重复的代码

Example:

class A

{

private:

int x=1;

int y{2};

public:

A()

{

}

A(int i):x(i)

{

}

A(int i,int j):x(i),y(j)

{

}

void fun()

{

cout<<x<<ends<<y<<endl;

}

};

int main()

{

A a;

a.fun();//1 2

A b(100);

b.fun();//100 2

A c(100,200);

c.fun();//100 200

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐