类作用域

在类中定义的名称(如类数据成员和类成员函数名)的作用域都为整个类,作用域为整个类的名称只在该类中是已知的,在类外是不可知的。因此,可以在不同类中使用相同类成员名而不会引起冲突。例如,Stock类的share成员不同于JobRide的share成员,另外,类作用域不能直接从外部访问类的成员,公有函数也是如此。也就是说,要调用共有函数,必须通过对象:
定义成员函数时,必须使用作用域解析运算符

void Socket::update()
{
....
}

总之,在类声明或成员函数定义中,可以使用未修饰的成员的名称,构造函数在被调用时,才可以被识别,因为他的名称和类名相同

class IK{
private:
int fuss;
public:
IK(int f = 9)
{
fuss = f;
}
void ViewIK() const;
};
void IK::ViewIK() const
{
cout<<fuss<<endl;
}
int main()
{
IK*pik = new IK;
IK ee = IK(8);
ee.ViewIK();
pik->ViewIK();
}

作用域为类的常量

有时候使符号常量的作用域为类很有用。由于常量对于所有对象来说都是相同的,因此创建一个由所有对象共享的常量是很有必要的。

class Bakery
{
private:
const int Months = 12;
double dosts[Months]
}

这样可以吗?是不行的,因为目前我们是在声明,声明只是描述,并不会给成员赋值,虽然表面上我们赋值了,但没有创建对象就没有存储空间,所以数组也并没有声明
介绍两种作用域类内的方法

  1. 类中声明一个枚举
class Bakery
{
private:
enum {Months = 12};
double dosts[Months];
}

枚举并不会创建数据成员,所有对象都不会包含枚举,而且这只是一个符号常量,在作用域为整个类的代码遇到他时,编译器会用12替换,所谓符号常量,就是用一个字符串来替换程序中出现的标识符,和宏定义类似,内存中没有以符号常量命名的存储空间。

  1. static
    static申明的常量也没有放在对象的空间中,他与其他静态变量存放在一起,而不是在对象中,可以被所有类创建的对象共享。

作用域内枚举

传统的枚举,如果我们枚举量一样的话可能发生冲突

enum egg{Small,Medium,Large,Jumbo};
enum t_shirt{Small,Medium,Large,Xlarge};

将无法通过编译,因为egg Small和t_shirt Small位于相同的作用域内,它们将发生冲突。C++11提供了一种新枚举,作用域为类,如:

enum class  egg{Small,Medium,Large,Jumbo};
enum class  t_shirt{Small,Medium,Large,Xlarge};

也可以用strut代替class 无论哪种方式,都需要使用枚举名来限定枚举量

1. egg choice = egg::Large;         //the Large enumerator of the egg enum
2. t_shirt Floyd = t_shirt::Large;  //the Large enumerator of the t_shirt enum

枚举量的作用域为类时,就不会发生之前的冲突了。
C++11常规枚举将会被默认转为整型,但类内枚举不能隐式转换为整型。但是我们看可以显式转换(强制)

int frodo  = int(t_shirt::Small);

网站标题:CV鼻祖洋芋

原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/c/208/

本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!

(0)
上一篇 6天前
下一篇 6天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注