C++访问Private,Protecd的一些方法总结

前言

在编写C++程序中 我们偶尔会碰到这样的三种特殊修改变量值的需求:

[1]在不修改类原本的实现下,访问修改类的Private变量

[2]在不修改类原本的实现下,修改类的Protected变量

Private变量访问

public类模版函数特化

这种办法利用了类模版函数特化来实现,如下所示:

比如下面一个类

class TestA
{
public:template<typename DataType>void Print(DataType Data){printf("1111111111111111");}private:int a;string c;
};

上面一个类所有变量都是Private, 并且存在一个Public模版函数, 这时候就可以通过模版函数特化来进一步访问。

// 通过模版特化实现修改 TestA的a和c变量的函数
struct SetValueParam
{int a;string c;
};template<>
void TestA::Print(SetValueParam param)
{a = param.a;c = param.c;printf("a = %d, c = %s\n", a, c.c_str());
}int main()
{SetValueParam param{ 1, "Test" };TestA testA;testA.Print(param);std::cout << "Hello World!\n";
}

这种访问Private办法最大的限制是类本身得存在Public模版函数.

Protected变量访问

Protected变量访问比较常用的一种方法是用过定义母类方法来访问。

class TestB
{
protected:int a = 10;string c = "aaaa";
};class AccessClassB_a : public TestB
{
public:int GetA(){return a;}
};int main()
{TestB testb;AccessClassB_a* classBptr = (AccessClassB_a*)(&testb);printf("a = %d\n", classBptr->GetA());std::cout << "Hello World!\n";
}

在 博主Yaksue的C++ 在外部访问对象的protected成员的方法_c++对象可以方位protect成员吗-CSDN博客

有段宏代码可以快速定义访问具体某个类的某个Proteced变量的代码,比较好用, 推荐进这篇博客里拷贝使用.

资料参考

[1] C++ 在外部访问对象的protected成员的方法_c++对象可以方位protect成员吗-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1452878.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

解决Qt的multimedia库在clion中依赖库补全的问题

解决Qt的multimedia库在clion中使用报错的问题 在clion中&#xff0c;使用Qt的multimedia库时会报如下错误&#xff1a; defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer" 我猜测出现这个错误的原因很可能是因为…

区块链中的gas与转账收款相关概念

区块链是一个经济系统 计算与存储系统都是稀缺的&#xff0c;区块链的工作需要消耗资源共识、trustless需要矿工的工作&#xff0c;而矿工需要激励Transaction的执行有成本&#xff08;gas&#xff09;,gas费成为矿工的奖励ether是这个经济生态系统的通行货币 关心的问题 合…

Techo TVP技术 沙龙

Techo TVP技术 沙龙 今天参加了 在上海 徐汇 腾讯云大厦 举办的 Techo TVP 技术沙龙&#xff08;主要介绍 AI agent 让我感受很深&#xff09; &#xff0c;那什么是 AI Agent呢&#xff1f; 是一个智能体&#xff0c;由大语言模型驱动&#xff0c;具有自主理解、感知、规划、…

【react小项目】bmi-calculator

bmi-calculator 目录 bmi-calculator初始化项目01大致布局01代码 02完善样式02代码 03输入信息模块03代码 04 使用图表04代码 05详细记录信息渲染05代码 06 让数据变成响应式的06-1输入框的数据处理06-2图表&#xff0c;和记录信息的区域数据处理 07 删除功能&#xff0c;撤销功…

维度建模中的事实表设计原则

维度建模是一种数据仓库设计方法&#xff0c;其核心是围绕业务过程建立事实表和维度表。事实表主要存储与业务过程相关的度量数据&#xff0c;而维度表则描述这些度量数据的属性。 以下是设计事实表时需要遵循的几个重要原则&#xff0c;来源于《维度建模》那本书上&#xff0…

TCP与UDP案例

udp不会做拆分整合什么的 多大就是多大

STM32学习记录(五)————外部中断EXTI

文章目录 前言一、外部中断EXTI基础知识1.外部中断介绍2.外部中断框架2.1AFIO2. 2.STM32外部中断机制框架 总结 前言 一个学习STM32的小白~ 有问题私信或评论区指出~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、外部中断EXTI基础知识 1.外部中…

git删除已创建tag标签

前言 一不小心把tag标签名称复制错了&#xff0c;现将删除 1.删除本地标签 1.1.执行下面命令 git tag -d 1.5.2401161.5.240116是创建的tag标签名称 2.如果是删除远程的tag标签名称的话&#xff0c;看下面命令 2.1.删除远程标签 git push --delete origin <tagname>…

C学习自学笔记

C学习笔记 0>C语言概述 为什么学习C语言 1&#xff09;C的起源和发展------了解即可 B语言、C语言、C语言的产生地&#xff1a;都出自 美国贝尔实验室 2&#xff09;C的特点 优点&#xff1a;代码量小、速度快、功能强大 缺点&#xff1a;危险性高、开发周期长、可移植性…

【PL理论】(25) C- 语言:表达式求值的推理规则 | 执行语句的推理规则 | 语句执行的推理规则

&#x1f4ad; 写在前面&#xff1a;本章我们将继续更新我们的 "C-" 语言&#xff0c;更新表达式求值的推理规则、执行语句的推理规则以及语句执行的推理规则。 目录 0x00 C- 语言更新&#xff1a;表达式求值的推理规则 0x01 C- 语言更新&#xff1a;执行语句的推…

13.docker registry(私有仓库)

docker registry&#xff08;私有仓库&#xff09; 1.从公有仓库中下载镜像比较慢 &#xff0c;比如docker run执行一个命令假设本地不存在的镜像&#xff0c;则会去共有仓库进行下载。 2.如果要是2台机器之间进行拷贝&#xff0c;则拷贝的是完整的镜像更消耗空间。 3.如果1个…

springboot优雅shutdown时如何保障异步线程的安全

我前面写了一篇springboot优雅shutdown的文章&#xff0c;看起来一切很美好。 https://blog.csdn.net/chenshm/article/details/139640775 那是因为没有进行多线程测试。如果一个请求中包括阻塞线程&#xff08;主线程&#xff09;和非阻塞线程&#xff08;异步线程&#xff09…

JVM 垃圾回收分配及算法

一、判断对象是否可以回收 垃圾收集器在做垃圾回收的时候&#xff0c;首先需要判定的就是哪些内存是需要被回收 的&#xff0c;哪些对象是「存活」的&#xff0c;是不可以被回收的&#xff1b;哪些对象已经「死掉」了&#xff0c;需 要被回收。 一般有两种方法来判断&#xff…

[Cloud Networking] SPDY 协议

文章目录 1. 背景2. SPDY 之前3. SPDY 项目目标4. SPDY 功能特点4.1 SPDY基本功能4.2 SPDY高级功能 1. 背景 TCP是通用的、可靠的传输协议&#xff0c;提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。 HTTP是提供基本请求/响应语义的应用层协议。 不…

第一篇:容器化的未来:从Docker的革命到云原生架构

容器化的未来&#xff1a;从Docker的革命到云原生架构 1. 引言 在当今快速演进的技术领域&#xff0c;容器化技术已经成为云计算和微服务架构的重要组成部分。该技术以其高效的资源利用率、快速的部署能力和卓越的隔离性能&#xff0c;彻底改变了软件开发和部署的方式。容器化…

RPG游戏完整指南

环境&#xff1a;unity2021urp 本教程教大家如何使用Unity创建一个RPG游戏&#xff0c;玩家可以在城镇场景中进行导航并寻找战斗&#xff0c;并在战斗中遇到不同类型的敌人。玩家可以向敌人施加不同的动作&#xff0c;如&#xff1a;常规攻击和撤离。这会是一个十分有趣的体验。…

c++20 规范, vs2019 , 头文件 <mutex> ,注释以及几个探讨

&#xff08;1 探讨一&#xff09; mutex 这个名称的来源是 mutual exclusion &#xff1a;互相排斥。 mutex 与 recursive_mutex 的数据成员的定义如下&#xff1a; 测试如下&#xff1a; 运行以下&#xff1a; 以及&#xff1a; &#xff08;2 探讨二&#xff09; recursive_…

cmake构建Qt项目

cmake构建Qt项目 项目结构 一、添加头文件 # 添加头文件目录&#xff0c;还需要在add_executable中添加头文件&#xff01;&#xff01;&#xff01; include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_executable(landlardsinclude/test.h)二、添加源文件 aux…

【内存管理之堆内存】

1.栈上的基元 2.栈上的聚合对象 3.手动分配和释放 4.分配堆内存 5.数组内存分配和释放 6.数组内存分配 7.不要使用野指针 8.黑暗时代

SpringBoot 第一天

什么是Spring Boot 学习过spring&#xff0c;并且做过项目的估计都经历过&#xff0c;xml文件的繁杂配置&#xff0c;让人眼花缭乱&#xff0c;且极易出错&#xff0c;因此 Spring 一度被称为“配置地狱” 为了简化 Spring 应用的搭建和开发过程&#xff0c;Pivotal 团队在 S…