day2 2.15类的作用域

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};

更换,也必须是整型,短整型或者长整型或者整型

发布了94 篇原创文章 · 获赞 66 · 访问量 5481

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/105068826
今日推荐