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

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博客

相关文章:

  • 数据分析的流程是啥样?
  • web前端教程全套:从入门到精通的全方位探索
  • Rust 异步 trait 的实现困难
  • 【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念
  • FreeBSD jail里面pkg 无法update、search和install
  • 零基础到高手蜕变:一步到位Jupyter Notebook安装全攻略
  • Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS
  • C++设计模式——Decorator装饰器模式
  • OpenCV 4.10 发布
  • SpringBoot使用jasypt实现数据库信息的脱敏,以此来保护数据库的用户名username和密码password(容易上手,详细)
  • 经销商的生意好坏很大程度上跟这群人有关
  • 利用Cesium和JS实现地点点聚合功能
  • FastWeb - Lua开源跨平台网站开发服务
  • Swift 是 C++ 的最佳继任者
  • OpenCore 引导完美升级
  • 分享的文章《人生如棋》
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 230. Kth Smallest Element in a BST
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • css系列之关于字体的事
  • Laravel5.4 Queues队列学习
  • leetcode-27. Remove Element
  • spring学习第二天
  • SQLServer之创建显式事务
  • 成为一名优秀的Developer的书单
  • 分布式事物理论与实践
  • 关于使用markdown的方法(引自CSDN教程)
  • 面试遇到的一些题
  • 世界上最简单的无等待算法(getAndIncrement)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 线上 python http server profile 实践
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 小而合理的前端理论:rscss和rsjs
  • 译米田引理
  • 《天龙八部3D》Unity技术方案揭秘
  • 阿里云ACE认证学习知识点梳理
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​决定德拉瓦州地区版图的关键历史事件
  • #php的pecl工具#
  • #QT(串口助手-界面)
  • (7)STL算法之交换赋值
  • (8)STL算法之替换
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (全注解开发)学习Spring-MVC的第三天
  • (十) 初识 Docker file
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ***监测系统的构建(chkrootkit )
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET企业级应用架构设计系列之结尾篇
  • .net项目IIS、VS 附加进程调试
  • .NET性能优化(文摘)