- 前言
- 类作用域
- 类内常量,枚举
- 成员初始化
- 静态成员
- 类内枚举
- C++11枚举类
- 后记
本篇是类基础中的补充部分,类作用域,枚举类。
类作用域之前作用域篇中提到了全局作用域和局部作用域,以及命名空间作用域,此外C++类引入了类作用域。
类中的名称,即数据成员和成员函数,作用域都为整个类,在类内是已知的,类外是未知的。
类中的名称不会与类外名称冲突。
在定义类方法时,必须使用作用域解析运算符::
,如下所示:
SimpleClass::SimpleClass(int a=1){
a_ = a;
}
SimpleClass::add() {
a_++;
}
在类声明和定义的代码块中,因为已经限定在类内,因此不需要使用作用域解析符。
在调用类方法时,类作用域限制意味着不能从类外直接访问类的成员。对象调用相当于给成员提供了类作用域解析:
SimpleClass sc = SimpleClass(2);
sc.add();
构造函数与类名相同,因此在类作用域内,可以直接使用。而add()
方法就必须通过对象来提供类作用域解析。
如果类内有一个常量,该常量对所有该类的对象都是相同的。
成员初始化C++11的成员初始化可以直接在类内定义常量:
class SimpleClass{
private:
const int b = 10;
}
而在C++11之前,这样的类内定义不被允许。类内常量必须通过静态成员或者类内枚举实现。
成员初始化将在后续类的进阶中继续学习。
静态成员类的静态成员与程序中的其它静态成员存放在一起,而不存储在对象中。因此,静态成员只有一个,被所有同类对象分享:
class SimpleClass{
private:
static const int b = 10;
}
静态成员将在类的进阶中继续学习。
类内枚举类声明中的枚举作用域在类内,因此类内枚举相当于是为整个类提供了整型符号常量:
class SimpleClass{
private:
enum myEnum {Months = 12};
double costs[Months];
}
这里的Months
是一个符号名称,作用域为类内。
这里的枚举myEnum
只是为类提供了一种新的类型,而不是数据成员。所有对象都不会包含枚举,但可以包含枚举变量。
注意:枚举量只能是整型数据。
C++11枚举类C++11中引入了枚举类,也叫强类型枚举scoped enum type
。
老式枚举unscoped enum type
可能会出现两个枚举的枚举量出现重名冲突:
enum color_old {red, blue, green, orange};
enum fruit_old {appple, blueberry, watermelon, orange};
这两个枚举在同一作用域内,因此同名枚举量orange
会发生冲突。
C++11的枚举类,枚举量被限制了在其枚举类的作用域中:
enum color_old {red, blue, green, orange};
enum class color {red, blue, green, orange};
enum class fruit {appple, blueberry, watermelon, orange};
void main(){
color_old a = orange;
color b = color::orange;
fruit c = fruit::orange;
}
使用枚举类中的枚举量时,必须使用作用域解析符指定枚举类名,因此避免了名称冲突。
老式枚举将能够隐式转换为整型,但枚举类不能隐式转换为整型:
enum color_old {red, blue, green, orange};
enum class color {red, blue, green, orange};
enum class fruit {appple, blueberry, watermelon, orange};
void main(){
color_old a = orange;
color b = color::orange;
fruit c = fruit::orange;
int aa = orange;
int bb = color::orange; // error1!
color::orange
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?