Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >类作用域

类作用域

作者头像
用户7272142
发布于 2023-10-11 13:20:10
发布于 2023-10-11 13:20:10
18700
代码可运行
举报
文章被收录于专栏:Republic博客Republic博客
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Socket::update()
{
....
}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
}

作用域为类的常量

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Bakery
{
private:
const int Months = 12;
double dosts[Months]
}

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

类中声明一个枚举

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Bakery
{
private:
enum {Months = 12};
double dosts[Months];
}

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

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

作用域内枚举

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum egg{Small,Medium,Large,Jumbo};
enum t_shirt{Small,Medium,Large,Xlarge};

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum class  egg{Small,Medium,Large,Jumbo};
enum class  t_shirt{Small,Medium,Large,Xlarge};

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

egg choice = egg::Large; //the Large enumerator of the egg enum

t_shirt Floyd = t_shirt::Large; //the Large enumerator of the t_shirt enum

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
枚举量的作用域为类时,就不会发生之前的冲突了。
C++11常规枚举将会被默认转为整型,但类内枚举不能隐式转换为整型。但是我们看可以显式转换(强制)

int frodo = int(t_shirt::Small);

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
类中的知识点
1.this 指针 在简单的程序中,类成员函数通常涉及一个对象,但是复杂时有可能涉及两个对象,这种情况就要用到指针。 多说无益,look!
用户8247415
2021/04/13
3490
EasyC++62,类常量和类枚举
比如说我们在类当中定义一个数组,希望可以定义一个常量,用来初始化数组的长度。既然是用来初始化数组长度的,那么这个值自然也不会改变,我们定义成const是否可行呢?比如这样:
TechFlow-承志
2022/08/26
3110
EasyC++62,类常量和类枚举
C++ 作用域使用规范建议
C++ 在 C 的基础上引入了名字空间机制,使C中作用域的级别从原有的文件域(全局作用域)、函数作用域和代码块作用域(局部域)增加了名字空间域和类域。名字空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。
恋喵大鲤鱼
2022/05/09
1.1K0
Google C++编程风格指南(三)之作用域的相关规范
C++在C的基础上引入了名字空间机制,使C中作用域的级别从原有的文件域(全局作用域)和局部域(函数作用域和代码块作用域)中间增加了名字空间域和类域。
恋喵大鲤鱼
2018/08/03
1.3K0
Google C++ 编程风格指南(二):作用域
虽然类已经提供了(可嵌套的)命名轴线 (YuleFox 注: 将命名分割在不同类的作用域内), 名字空间在这基础上又封装了一层.
CPP开发前沿
2022/03/03
8190
作用域
标识符的作用域有函数原型作用域、局部作用域(块作用域)、类作用域和 命名空间(namespace) 作用域
小飞侠xp
2022/05/13
9710
真没想到nullptr和NULL得区别,大了去了
//禁止内建型别之间进行隐式型别转换,如果大括号内的表达式无法保证能够采用进行初始化的对象来表达,则代码不能通过编译
用户9831583
2022/12/04
1.8K0
C++中的作用域与生命周期
Pascal之父Nicklaus Wirth曾经提出一个公式,展示出了程序的本质:程序=算法+数据结构。后人又给出一个公式与之遥相呼应:软件=程序+文档。这两个公式可以简洁明了的为我们展示程序和软件的组成。
恋喵大鲤鱼
2018/08/03
1.2K0
记录C++遗忘项
extern那些事 extern "C" 是放在.cpp文件中,而不是放在.c中,不然会有编译错误。放在.c的情况都是加上了#ifdef __cplusplus#endif即用来识别当前文件用C++进行编译,所以才不会报错。 static那些事 静态成员变量未赋值的存放在bss段,赋值过就放在data段. 类的静态数据成员如成员函数或者成员变量,不依赖于类对象本身,即类中的静态数据成员由对象共享。因此静态变量不能使用构造函数初始化;静态函数仅能访问静态数据或静态成员函数。 静态类对象和静态对象(变量)一样,
Rock_Lee
2021/01/13
6320
每个C++开发者都应该学习和使用的C++11特性
Hi,大家好!本文讨论了所有开发人员都应该学习和使用的一系列 C++11特性。该语言和标准库中有很多新增功能,本文只是触及了皮毛。但是,我相信其中一些新功能应该成为所有C++开发人员的日常工作。
Linux兵工厂
2024/03/21
1450
每个C++开发者都应该学习和使用的C++11特性
C++11强类型枚举
枚举类型是C/C++中用户自定义的构造类型,它是由用户定义的若干枚举常量的集合。枚举值对应整型数值,默认从0开始。比如定义一个描述性别的枚举类型。
恋喵大鲤鱼
2019/01/03
3.2K0
第 19 章 特殊工具与技术
将这篇文章在作业部落中的链接放置于此,对格式有轻微强迫的童鞋,请移步这里。 第 19 章 特殊工具与技术 标签: C++Primer 学习记录 运行时类型识别 枚举类型 类成员指针 ---- 第 19 章 特殊工具与技术 19.1 控制内存分配 19.2 运行时类型识别 19.3 枚举类型 19.4 类成员指针 19.5 嵌套类 19.6 union:一种节省空间的类 19.7 局部类 19.8 固有的不可移植的特性 ---- 19.1 控制内存分配 当使用一条 new表达式时string *sp =
用户1653704
2018/06/07
8840
C++从入门到精通——类的作用域及类的实例化
类的作用域是指类中定义的变量和方法的可见性和可访问性范围。在类的内部,所有成员(包括属性和方法)都具有类作用域,意味着它们可以在类的任何方法中被访问。然而,类的外部无法直接访问这些成员,除非通过类的实例或类本身(对于静态成员)。类的成员可以被设置为公有(public)、私有(private)或受保护的(protected),以控制其在不同上下文中的可见性和可访问性。这种作用域的控制有助于封装和隐藏类的实现细节,同时提供清晰的接口供外部使用。
鲜于言悠
2024/04/11
5630
C++从入门到精通——类的作用域及类的实例化
java(2)——字面常量和变量,变量的作用域,局部变量,成员变量
java里有两种常量,一种叫字面常量,而使用final修饰的常量为符号常量。 字面常量有很多种类型:
gzq大数据
2020/11/11
8650
java(2)——字面常量和变量,变量的作用域,局部变量,成员变量
自修C++PrimerPlus--第九章(上)
我们的成员函数在进行定义的时候,需要在这个成员函数的前面添加上这个域作用限定符,调用这个成员函数的时候,需要使用这个对象进行调用,因为类里面定义的内容的作用域是这个类,因此不同的这个类里面可以定义相同的变量;
阑梦清川
2025/02/24
770
自修C++PrimerPlus--第九章(上)
《C++Primer》第十九章
重载这两个运算符与重载其他运算符的过程大不相同。想要真正重载new和delete的方法,首先要对new表达式和delete表达式的工作机制足够了解:
TOMOCAT
2020/12/03
1.4K0
教你快速了解C语言中的作用域和常量
个元素 ps: 虽然暂时还没有给各位铁汁讲数组但这里先让大家见识一下 后面会给各位铁汁详细讲解数组,看完秒懂!
鸽芷咕
2023/12/25
2570
教你快速了解C语言中的作用域和常量
【笔记】《C++Primer》—— 第19章:特殊工具与技术
这一章介绍了平时可能不太会用到的C++特性,内容比较杂。其中有类似枚举,联合,局部类这样之前就用过的特性,也有类成员指针,局部类这样新了解的特性。其中个人觉得19.1对new和delete的讨论很重要,19.2的RTTI介绍也扩展了我们编码的自由度,最后19.8的位域让我们可以更方便地进行位运算。
ZifengHuang
2020/07/29
8810
【笔记】《C++Primer》—— 第19章:特殊工具与技术
【C++指南】作用域限定符 :: 使用详解
此时,如果要访问全局变量,就需要使用::操作符。不过,通常不推荐在函数内部使用全局变量,因为这会增加代码的耦合度和复杂度。但为了演示作用域限定符的用法,这里给出一个例子:
倔强的石头_
2024/12/06
1090
从初级到高级的enum那些事
目前一直在做c++底层项目,于是整理了c++相关难点,现在已经整理出如下多部分内容:每一个链接进去有相应的代码与文档解释。
公众号guangcity
2019/09/20
2K0
从初级到高级的enum那些事
相关推荐
类中的知识点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验