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
}
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
}
相关文章推荐
- 作用域内枚举(C++11)
- 关于c++的class(偏c++11以前,构造、静态成员、const、初始化列表、友元、内联、template)
- 读《深度探索C++对象模型》之成员初始化列表作用
- C++学习笔记之作用域为类的常量和作用域内的枚举
- C++11特性:列表初始化:VS2010中vector<string>的初始化方式
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- C++11 FAQ中文版:类成员的内部初始化
- 成员初始化表的作用 实例解析
- C++11中__func__,__cplusplus,long long类型,static_assert,noexcept,快速初始化成员变量用法
- c++11 成员变量初始化
- C++11新特性——大括号初始化
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- C++11特性--新的类功能--特殊的成员函数(移动构造函数,移动赋值运算符),默认方法和禁用方法(default,delete),委托构造函数,管理虚方法(override,final)
- 枚举的作用和特性,为枚举元素添加方法
- C++11新特性——大括号初始化
- 如何利用c++11的新特性编写类成员线程函数并实现同步
- C++11特性(2):快速初始化变量、final和override、模版函数
- 成员初始化表的作用 实例解析
- C++11新特性之新类型与初始化
- C++11新特性学习笔记—使用花括号就地初始化