类作用域及域内枚举

类作用域及域内枚举

类作用域是C++引进的一种在类中的作用域,比如类成员函数就要用 :: 域作用符调用,比如类stock

class stock
{
private :
        std :: string company;
        long shares;
        double share_val;
        double total_val;
        void set_tot()
        {
                total_val = shares * share_val;
        }
public :
        stock();
        ~stock();
        stock(const std :: string & co  , long n = 0   , double pr = 0.0 ) ;
        void acquire(const std :: string &co, long n  , double pr);
        void buy(long num , double price);
        void sell(long num , double price);
        void update(double price);
        void show() const;
        const stock& topval(const stock& s) const;
};

我要定义show()函数,应该是在stock这个类下定义,用::完成这个在类作用域定义

void stock :: show () const
{
	std :: cout.precision(5);
	std :: cout << "Company :" << company
	<< "            Shares :" << shares << '\n'
	<< "Share Price : $" << share_val
	<< "            Total Worth:  $" << total_val << '\n';
}

域内枚举

非静态变量在类中是没有存储值的空间,比如我需要在类中需要使用一个值为12的常量

class Bakery
{
private:
    const int mounts = 12;
    double Array[mounts];
};

这样编译器会报错,因为没有空间放mounts这个值,导致数组不能生成和初始化

在这里插入图片描述

利用枚举就可以决绝这个问题

class Bakery
{
private:
    enum {mounts = 12};
    double Array[mounts];
};

在上面这个类中,mounts只是个普通的符号,并没有生成枚举变量,类似于c语言中的宏定义,是不占有空间,在类作用域这个空间中就是将mounts替换为12而已,如果需要两组枚举怎么办?

class Bakery
{
private:
    enum food {mounts = 12};
    enum juice {mounts = 12};
};

在这里插入图片描述

如果按照以上定义的话,就会产生歧义,因为两个枚举值是同样的,C++11中提供了一种新的枚举值,其枚举的作用域是类,声明如下:

class Bakery
{
private:
    enum class food {mounts = 12};
    enum class juice {mounts = 12};
};

在一些情况下,常规的枚举值,比如enum food {mounts = 12}中的mounts是可以自动转换为整形,将值复制费整形或者用于比较表达式的时候就可以自动转换为整形,但是新枚举类型enum class food {mounts = 12}中的mounts是不会转换为整形的,要通过一个强制转换才可以…

所以说

class Bakery
{
private:
    enum class food {mounts = 12};
    enum class juice {mounts = 12};
    int Array[int(food::mounts)];
};

这个类才可以编译成功…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值