当前位置: 首页 > news >正文

【和春笋一起学C++】(三十九)类作用域

目录

1、类作用域的含义

2、作用域为整个类的常量


1、类作用域的含义

C++中引入了一种新的作用域——类作用域。

在类中定义的名称(数据成员名和成员函数名)的作用域都为整个类,作用域为整个类的名称只在该类中是已知的,在类外是不可知的。因此,在不同的类中使用相同的类成员名不会引起冲突。另外,类作用域也意味着不能从外部直接访问类的成员,包括公有成员函数。要调用公有成员函数,必须通过类对象。

在定义类的成员函数时,必须使用作用域解析操作符指出其所属的类。如Student类中的get_average_score()函数定义,在函数名前指出了该函数是属于Student类的成员函数。

int Student::get_average_score()
{using namespace std;show_score();int average= (yuwen_score + shuxue_score + yingyu_score) / 3;cout << "平均分:" << average << endl;return average;
}

在类声明或成员函数定义中,使用同类的成员函数和数据成员时不需要加修饰符。如get_average _score()函数的定义中调用show_score()函数时不需要加修饰符。


原文为CSDN作者:三月微暖寻春笋 


2、作用域为整个类的常量

假设需要创建一个由所有对象共享的常量,如在Student类中需要声明一个分数最大值100,在类声明中使用常规的常量声明方式声明一个常量,如下:

class Student
{
public:...private:const int max_score = 100;
};

这是不可行的,因为类声明只是描述了对象的形式,并没有真正创建对象,在类对象被创建之前,没有用于存储值的内存空间。

在C++中有两种方式可以创建一个所有对象共享的常量。第一种方式是声明一个枚举,在类中声明的枚举,它的作用域为整个类,因此,可以用枚举为整型常量来提供作用域为整个类的符号名称。如下:

class Student
{
public:...private:enum {max_score=100};
};

说明:用这种方式声明枚举并不会创建类数据成员,即所有对象中都不包含枚举类型的变量,max_score只是一个符号名称,在作用域为整个类的代码中遇到它时,编译器将用30来替换它。(这里使用枚举只是为了创建符号常量,并不打算创建枚举类型的变量,因此没有提供枚举名)

第二种在类中定义常量的方式是使用关键字static。

class Student
{
public:...private:static const int max_score = 100;
};

这将创建一个名为max_score的常量,作用域为整个类,该常量与其他静态变量存储在一起,而不是存储在对象中。因此只有一个max_score常量,它被所有的Student类对象共享。

http://www.dtcms.com/a/365653.html

相关文章:

  • [鸿蒙心迹]带新人学鸿蒙的悲欢离合
  • “企业版维基百科”Confluence
  • Docker实战指南:从安装到架构解析
  • 【QT特性技术讲解】QPrinter、QPdf
  • leetcode 38 外观数列
  • 联想开天X7:携手海光,开启信创PC高性能新时代
  • Java中 String、StringBuilder 和 StringBuffer 的区别?
  • WHAT - 协程及 JavaScript 具体代码示例
  • PgManage:一款免费开源、跨平台的数据库管理工具
  • Packet Radio Network,PRNET
  • 从发现到恢复,看瑞数信息如何构建“抗毁重构”实战路径
  • VR节约用水模拟体验系统:沉浸式体验如何改变我们的用水习惯
  • 全员0门槛数据分析:纷享销客BI Agent,让数据价值直抵业务
  • 实现信号的小波分解和重构
  • 自动化仓库托盘搬运减少错误和损坏的方法有哪些?实操案例解读
  • 12、Docker基本概念 容器与镜像与安装
  • MyBatis xml配置文件
  • 借助Aspose.ZIP SDK,在 C# 中压缩和提取 LZIP 文件
  • ubuntu的2T新硬盘分区、格式化并挂载
  • Linux学习:生产者消费者模型
  • 明远智睿 3568 核心板:四核 Cortex - A55 架构驱动的性能新标杆
  • C++中cdecl、stdcall、fastcall、thiscall异同——10分钟弄清
  • linux0.12 head.s代码解析
  • Alpha World赞助Hello Blockchain Thailand,AWT成为全球共识焦点
  • 袋鼠云产品功能更新报告14期|实时开发,效率再升级!
  • 【IQA技术专题】NIQE代码讲解
  • VMWare上搭建分布式Hadoop集群
  • STM32F103按钮实验
  • 大语言模型领域最新进展
  • 笔记:卷积神经网络(CNN)