@cxm-2016
2016-09-05T10:21:26.000000Z
字数 1157
阅读 1953
c++
no
全局变量可以在文件的任意位置使用它,但是局部变量只能在其所属的代码块中使用。C++中引入了一种新的作用域,类作用域。作用域为类的名称在整个类中是已知的,在类外是不可见的。也就是说,作用域为类的成员只能被通过对象调用。
使用类成员时,必须根据上下文使用直接成员运算符(.)、间接成员运算符(->)或作用域解析符(::)
1,直接成员运算符:使用在对象上,以调用成员
Student student;
student.show();
2,间接成员运算符,一般用在对象指针上
Student *student = new Student();
student->show();
3,作用域解析符:常用在类的内部
void Student::show(){
cout<<Student::name<<endl;
}
在类的内部创建常量不能直接使用const,因为类的声明只是描述了对象的形式,并没有创建对象。因此在对象创建之前,将没有用于存储的空间。但有两种方式可以实现相同的效果。
1,在类中声明一个枚举
class Stack{
private:
enum{size=30}
public:
};
此时我们能够使用size常量作为栈的最大长度。假如我们想声明一个double类型的常量,可以在枚举下声明类型。
enum{size=30}
double costs[size];
此时就可以将size当做浮点型类操作了。
2,使用static关键字
class Stack{
private:
static const int size = 30;
double costs[size];
public:
};
在c++98中,只能使用static声明整数或者枚举的静态常量,c++11消除了这种限制。
当我们使用的枚举中包含名称冲突时,我们可以采用作用域为类的新枚举类型
enum class chinese{teacher};
enum class english{teacher};
这样我们可以采用上述这种方式来给各门课的老师设置常量。我们可以使用class或者struct中任意一个关键字。
这里需要注意的是常规枚举可以自动当做ing整型去使用,但是作用域枚举如果想要当成int使用必须经过强转
int x = int(chinese::teacher);
c++枚举的实现默认为int,但是在c++98中,枚举的表示与操作系统相关。c++11中统一了枚举的格式为int。并且如果我们不想使用默认的int还能通过下列语法更换枚举的底层实现。
enum class:short color{red,blue};
此时底层枚举实现为short类型,可以节省内存。注意:自定义类型必须是整型。