搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
编程领航者
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
存储虚拟化技术
2
Ubuntu 系统重启/关机/定时重启/定时关机命令_ubuntu 定时关机
3
【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33, M35P 差异】_cortex m33
4
OpenCV实现手势音量控制 报错日志 INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
5
树莓派---Snowboy语音唤醒_树莓派使用snowboy
6
python3对接godaddy API,实现自动更改域名解析(DDNS)_java godaddy域名解析接口
7
nginx对于XXX.com和XXX.com/index给映射到www.xxx.com的方式
8
ChatGPT 86个插件全解读:让你的学习、工作、生活效率翻倍!_chat gpt 有哪些插件
9
解决chrome扩展发通知不显示的问题_chrome插件不显示通知
10
如何使用 NMAP 命令进行网络扫描_nmap扫描网段内的所有ip
当前位置:
article
> 正文
C++之作用域运算符::_c++ struct作用域
作者:编程领航者 | 2024-01-31 19:16:12
赞
踩
c++ struct作用域
C++使用::运算符搞定很多东西,其中最基本的一个用处就是用来决议多继承中的重名成员。::运算符的本质是:左操作数是一个scope,右操作数是这个scope内的名字,可以是 scope,class,member或者function,variable等等,从左操作数指定的scope中找到有操作数这个实体。看起来非常优雅,不是么?可是,它有好几个缺陷。一、现实的常见的缺陷。分散在代码中,一旦改变会引起很多地方同时都需要改。其实这就是决策不能集中作出的一个典型现象。二、理论上的缺陷一。它丧失了虚拟性也就是多态性。这个问题说小也小说大也大,如果你就想静态调用,那么ok,非常好。如果我们需要多态性,那么对不起,不可能了。但是对于虚函数,我们一般期待的多态性。三、理论上的缺陷二。它主要体现在using语句中,我们知道,using可以引入一个名字,一个别的scope(主要是命名空间)中的名字,当然,也可以在子类中引用父类的名字以改变访问级别。这个行为的一个缺陷是引入了所有overload的名字,你不能引入部分实体。这在实践中一般没有问题,但是,一旦有了问题就非常难绕开。
:: 作用域运算符的使用
两个独立的类, 则互访时候, 只能是静态函数,可以通过 :: 访问。
如果 是继承关系, 则 静态非静态都可以。
struct CEngine
{
CEngine();
virtual ~CEngine();
void StartEngine();
void FreeEngine();
void UpdateEngine();
static void AccelerateEngine(); // 静态函数
static int AccelerateState; // 静态变量
int table;
};
// 游戏根类
struct CBaseGame
{
CBaseGame();
virtual ~CBaseGame();
void DestroyAllObject();
};
// 作用区运算符
struct CGame : public CBaseGame
{
CGame();
virtual ~CGame();
void Initialize();
void Update();
void Draw();
void Finalize();
// 组合方式下的调用
CEngine m_engine;
};
//[-------------------------------
// 构造 析构函数区
CGame::CGame()
{
}
CGame::~CGame()
{
}
CEngine::CEngine()
{
table = 0;
}
CEngine::~CEngine()
{
}
CBaseGame::CBaseGame()
{
}
CBaseGame::~CBaseGame()
{
}
//
//]----------------------------------
int CEngine::AccelerateState = 0; // 静态变量的初始化
void CEngine::AccelerateEngine()
{
}
void CEngine::FreeEngine()
{
AccelerateEngine(); // 非静态成员可以访问静态成员,反之不可以
AccelerateState = 456;
}
void CEngine::StartEngine()
{
}
void CEngine::UpdateEngine()
{
}
void CGame::Initialize()
{
//CEngine::StartEngine(); // 也就是只有有继承关系的时候才可以使用CEngine::StartEngine()方式调用
CEngine::AccelerateEngine(); // 因为是静态函数,所以调用是可以的。
CBaseGame::DestroyAllObject(); // 而由于继承关系,在自己内部则可以通过作用域运算符调用,
// 以表明是调用自己内部函数,还是根类函数
m_engine.AccelerateEngine();
m_engine.FreeEngine();
}
void CGame::Finalize()
{
}
void CGame::Draw()
{
}
void CGame::Update()
{
}
void CBaseGame::DestroyAllObject()
{
}
作用域:变量在程序中的起作用范围
简单分为:全局作用域、局部作用域、语句作用域
作用域优先级: 范围越小优先级越高
作用域运算符:“::”
如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::” ,“::”称为作用域运算符
//作用域
#include <iostream.h>
int avar=10; //全局变量avar
void main()
{
int avar=20; //局部变量avar
cout<<"avar is: "<<avar<<endl; //访问局部变量
avar=25; //1 //修改局部变量
cout<<"avar is: "<<avar<<endl;
cout<<"avar is: "<<::avar<<endl; //访问全局变量
::avar=30; //2 //修改全局变量
cout<<"avar is: "<<::avar<<endl;
}
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/article/detail/51590
推荐阅读
article
如何
优化
Spring
Boot
应用程序
的性能_springboot 性能
优化
...
通过使用数据库连接池,我们可以避免每次数据库操作都创建和销毁连接,而是从连接池中获取可复用的连接,从而提高数据库操作的性...
赞
踩
article
Linux
文件
IO...
在
Linux
下的一切接
文件
(Everything is file in Unix/
Linux
)。IEEE制定了一套POS...
赞
踩
article
STM32
跳至
硬件
错误
HardFault
_
Handle
的记录_
stm32f407
运行时出现
硬件
错误
...
我遇到的问题是使用
STM32
CubeMX配置完成之后,进入调试界面,直接运行程序可以跑至while循环之中,当分步运行时...
赞
踩
article
SPI
协议简介_
spi
从机
如何
发送数据
...
SPI
协议简介_
spi
从机
如何
发送数据
spi
从机
如何
发送数据
1.
SPI
简介
SPI
英文名叫(S...
赞
踩
article
HardFault
_
Handler
异常(死机)
的
处理...
在系统开发
的
时候,出现了
HardFault
_
Handler
硬件异常,也就是死机,尤其是对于调用了os
的
一系统,程序量大,...
赞
踩
article
springboot2.2 +
jpa
连接
多个
数据库
以及出现的
错误
(已解决)_
jpa
properti...
springboot2.2 +
jpa
连接
多个
数据库
的步骤在配置文件中添加数据的信息数据源配置类
jpa
配置类注意:当只连...
赞
踩
article
SPI协议_
spi
msb
...
。_
spi
msb
spi
msb
SPI 基础知识 SPI 是 ...
赞
踩
article
SpringBoot
多
数据源
切换
(超级简单)
_
springboot
多
数据源
配置
和
切换
...
背景:主从架构下,数据库的读写分离
_
springboot
多
数据源
配置
和
切换
springboot
多
数据源
配置
和
切换
...
赞
踩
article
linux
--
per
-
CPU
变量...
per
-
CPU
变量是一种存在与每个
CPU
本地的变量,对于每一种
per
-
CPU
变量,每个
CPU
在本地都有一份它的副本。li...
赞
踩
article
代码
随想录
训练营
day9
_给你两个
字符串
haystack
和
nee
dle
,请你在 haysta...
代码
随想录
训练营_给你两个
字符串
haystack
和
nee
dle
,请你在
haystack
字符串
中找出
nee
d...
赞
踩
article
Springboot中
上
一个
定时
任务
没
执行
完
,是否
会
影响下
一个
定时
任务
执行
分析及结论_调用
完
接口后不...
1.
定时
任务
默认是单线程
的
。如果
任务
执行
时间超过
定时
任务
间隔时间,不管是同
一个
定时
任务
还是不同
的
定时
任务
,下
一个
任务
都
会
...
赞
踩
article
《流浪地球》走入现实?
讯
飞
星火
再进化
,
开源
13B
大
模型
...
去年
讯
飞
星火
认知大
模型
V2.0 发布的时候
,
科大
讯
飞
董事长刘庆峰曾表示
,
讯
飞
星火
的代码生成和补齐维度上已经超过了 Ch...
赞
踩
article
解决
重启
Linux
服务器
后
数据
消失问题(重新
挂载
)_
linux
服务器
挂载
的东西
重启
就没了...
使用 reboot 命令
重启
服务器
后,
服务器
内
挂载
的文件全部丢失。那应该如何重新
挂载
呢?我们想将10.6.6.28上的目...
赞
踩
article
基于
yolov7
的
目标
跟踪
检测
...
实现飞机
目标
检测
终端代码:python detect_or_track.py --weight
yolov7
.pt --...
赞
踩
article
py
脚本
开机自启 源
chatgp
...
其中,Description是服务的描述,After表示服务应该在网络启动后启动,User是服务运行的用户,ExecSt...
赞
踩
article
【模拟赛】
沼泽地
(
插头
DP
)
_
小红
闯
沼泽地
...
诱人的呱呱声
(
mikoto诱捕器
)
,虽然不是绿色的……
_
小红
闯
沼泽地
小红
闯
沼泽地
...
赞
踩
article
论文解读:
PP
-
YOLO
E: An
evolved
version
of
YOLO
_
ppyoloe
...
论文地址:https://arxiv.org/pdf/2203.16250.pdf发表时间:2022
PP
-
YOLO
E基于...
赞
踩
article
没有
python
环境
的
电脑
中
运行程序-
pyinstaller
/ 依赖
文件
...
先在pip
中
安装
pyinstaller
验证是否成功,在cmd
中
首先进入
python
环境
,然后测试是否可以import p...
赞
踩
article
linux
:
YOLO5
配置(
ubuntu
20.04 下
安装
运行
yolov5
)_
linux
+c++...
ubuntu
20.04 下
安装
运行
yolov5
新建文件夹,
安装
python
安装
python-pip:克隆YOLOv5...
赞
踩
article
C/C++学习笔记:
变量
的
作用域
和
变量
的
引用
_
vs
的
length
如何
引用
...
文章目录
作用域
局部
变量
全局
变量
全局
作用域
运算符::综合示例
变量
的
引用
&C++
引用
vs
指针区分取地址&和
引用
&&
引用
...
赞
踩
相关标签
spring boot
后端
java
linux
IO文件操作
arm开发
stm32
单片机
嵌入式硬件
jpa
数据库
fpga开发
网络
springboot
kernel
开发语言
mysql
服务器
运维