1.在类中定义的名称,其作用域是整个类,改名称只在此类中是已知的,类外是不可知的。 【(.)----直接成员运算符 (->)------间接成员运算符 (::)----作用域解析运算符】
2.定义一个作用域为类的常量
1>直接定义《错误,不可行》
class base
{
private:
const int value=8; //定义错误
char str[value];
....
};
//因为类的声明只是描述了对象,并没有创建对象。因此,在创建对象前,将没有用于存储值得空间
俩种可行方法
2-1>在类中声明一个枚举,在类中声明的枚举作用域是整个类,因此可以用枚举为整型常量提供作用域为整个类的符号名称。
#include<iostream>
using namespace std;
class base
{
private:
enum {Value = 23};
int member[Value];
public:
base();
void show();
};
base::base()
{
member[0]=1;
}
void base::show()
{
cout<<"value is "<<Value<<" | member[0] "<<member[0]<<endl;
}
int main()
{
base str1;
str1.show();
return 0;
}
运行结果:
2-2>使用关键字static,static定义的常量将与其他静态变量存储在一起,而不是存储在对象中
#include<iostream>
using namespace std;
class base
{
private:
static const int Value=23;
int member[Value];
public:
base();
void show();
};
base::base()
{
member[0]=1;
}
void base::show()
{
cout<<"static value is "<<Value<<" | member[0] "<<member[0]<<endl;
}
int main()
{
base str1;
str1.show();
return 0;
}
运行结果:
3.作用域内枚举
1.错误示例,假设枚举dog和cat都定义了相同的枚举变量就会引起冲突
enum dog{run,sit,eat};
enum cat{run,jump,sleep};
//因为dog和cat在相同的作用域,所以发生冲突
2.解决方法提供一种新枚举,其作用域为类
enum class dog{run,sit,eat};
enum cat{run,jump,sleep};
//枚举的作用域变为类后,不同枚举中定义的枚举量就不会发生冲突