【C++】类作用域详解

举报
王博Kings 发表于 2020/12/30 00:37:41 2020/12/30
【摘要】 目录 1. 可以在不同类中使用相同的类成员名 2. 不能从外部访问类成员,公有成员函数如此,要调用公有成员函数,必须通过对象 3. 定义成员函数时必须使用作用域解析运算符 4. 使用成员运算符(.)、简介成员运算符(->)或作用解析运算符(::) 5.  作用域为类的常量 5.1 第一种方式是在类中声明一个枚举 5.2 第二种方式是使用关键字static: 6...

目录

1. 可以在不同类中使用相同的类成员名

2. 不能从外部访问类成员,公有成员函数如此,要调用公有成员函数,必须通过对象

3. 定义成员函数时必须使用作用域解析运算符

4. 使用成员运算符(.)、简介成员运算符(->)或作用解析运算符(::)

5.  作用域为类的常量

5.1 第一种方式是在类中声明一个枚举

5.2 第二种方式是使用关键字static:

6 作用域内枚举

C++11提供一种新的枚举, class 或者 struct


 

在类定义中的 名称作用域都为整个类,作用域为 整个类值在该类是已知的

1. 可以在不同类中使用相同的类成员名


      class Stock {
      public:
      int memi;
      double memd;
      };
      class Jodbj {
      public:
      int memi;
      double memd;
      };
  
 

2. 不能从外部访问类成员,公有成员函数如此,要调用公有成员函数,必须通过对象

Stock sleeper(........);

sleeper.show();

show();//这是错的!

3. 定义成员函数时必须使用作用域解析运算符


      void Stock::update(double price)
      {
       ...
      }
  
 

4. 使用成员运算符(.)、简介成员运算符(->)或作用解析运算符(::)


      Class obj; // Class is some class type
      Class *ptr = &obj;
      // member is a data member of that class
      ptr->member; // fetches member from the object to which ptr points
      obj.member; // fetches member from the object named obj
      // memfcn is a function member of that class
      ptr->memfcn(); // runs memfcn on the object to which ptr points
      obj.memfcn(); // runs memfcn on the object named obj
  
 

5.  作用域为类的常量

这样是错误的:


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

声明类只是描述了对象的形式,并没有创建对象

在创建对象前,将没有用于存储值得空间。

5.1 第一种方式是在类中声明一个枚举


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

这种声明枚举并不会创建类数据成员,也就是所有对象中都不包含枚举。

Months只是一个符号名称,在作用域遇到时自动替换。

5.2 第二种方式是使用关键字static:


      calss Bakery
      {
      private:
      static const int Months =12;
      double costs[Months];
      }
  
 

这将创建一个名为Months的常量,该常量将于其他静态变量存储在一起,而不是存储在对象中。

6 作用域内枚举

两个枚举定义中的枚举量可能会发生冲突

enum egg {big,  small, large};

enum shirt {big, small, large};

上面无法编译,因为在相同作用域,发生问题

C++11提供一种新的枚举, class 或者 struct

enum class egg{big,  small, large};

enum class shirt{big,  small, large};

如何使用?

egg choice = egg::large;

shirt FLUO= shirt::large;

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/98880185

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。