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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨夜※繁华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值