1.类的成员的作用域
在类定义中的名称,其作用域都为整个类,作用域为 整个类。其值在该类是已知的。
class car{
public:
int number;//车的牌号
};
class plane{
public:
int number;//飞机的型号
};
//都是number,作用域仅在自己相应的类内部。
2.类成员的访问
1)定义成员函数使用作用域解析运算符
class car{
public:
int m_number;//车的牌号
void set_number(int number);
};
void car::set_number(int number){
m_number = number;
}
2)使用成员运算符(.)、解析域运算符(->)
car c1;
c1.setnumber(5);
car *c2 = new car;
c2->setnumber(5);
3.类的常量成员定义
1)我们不能直接使用const定义成员变量
class Bakery
{
private:
const int months = 12;//错!
double Month[months];
}
原因:声明类只是描述了类的形式,并没有创建实际的对象,也就是说在创建对象前,将没有用于存储常量值的空间。
2)我们应该使用的方法
1.使用关键字static,配const,此时的常量成员变量在static静态变量的全局数据域存储
calss Bakery
{
private:
static const int months =12;
double Month[months];
}
2.使用枚举定义enum
class Bakery
{
private:m
enum { months =12 };
double Month [months];
}
这种声明枚举并不会创建类数据成员,也就是所有对象中都不包含枚举。
months只是一个符号名称,在作用域遇到时自动替换。
关于作用域内使用enum
1.如果同一个类内,两个枚举定义的枚举包含名称冲突相同,会发生冲突,如:
enum egg {big, small, large};
enum shirt {big, small, large};
//big,small,large,属于同一个作用域
解决办法使用作用域为类的新枚举类型(C++11提供)
//使用class
enum class egg{ small,medium, large};
enum class shirt{small,medium, large};
//使用struct
enum struct egg{small,medium,large};
enum struct shirt{small,medium,large};
使用,这里需要注意的是常规枚举可以自动当做ing整型去使用,但是作用域枚举如果想要当成int使用必须经过强转:
int x = (int)(egg::small);
注意
c++枚举的实现默认为int,但是在c++98中,枚举的表示与操作系统相关。c++11中统一了枚举的格式为int。并且如果我们不想使用默认的int还能通过下列语法更换枚举的底层实现。
enum class:short color{red,blue};
更换,也必须是整型,短整型或者长整型或者整型