C++中访问类的私有数据成员的第三种方法
我们知道,C++的类是有封装性的,那么对于私有数据成员我们如果想在类外访问,一般而言无外乎这么两种方法:
1、通过公有的成员函数
2、通过友元
这是两种通常的做法,还有一种是比较“反常”的,但是同样也可以达到这样的目的,那就是通过类的基地址偏移来访问,这是网上有人给出的例程:
#include <iostream>
#include "conio.h"
class tester
{
public:
tester() : i(5), ch('x'){};
private:
int i;
char ch;
};
int main(void)
{
tester myTester;
char* p = NULL;
p = (char*) &myTester + sizeof(int); //Here is the point! Jumps sizeof(int) units of bytes!
cout << "Address of ch = " << (void*) p << endl; //The type modifier void* forces it to output the
//address, not the content.
cout << "ch = " << * (p) << endl;
getch(); //Waits your action
* p = 'y';
cout << "Now ch = " << * (p) << endl;
return 0;
}
真是不看不知道,原来还可以这样子,指针这个东西还真是……。不过这种反常的做法也受到了一些限制,比方说对类的内存布局你需要清楚,否则得不到正确的地址。实际当中真的不知道谁是这么用的,总之是破坏了C++的封装性,不大好:)
转自http://blog.csdn.net/tassadar/article/details/871785
转载于:https://blog.51cto.com/2012huhu/1009198
C++中访问类的私有数据成员的第三种方法相关推荐
- C++访问类的私有数据成员的三种方法
总是忘记C++的私有数据成员到底什么能访问,今天总结下,特此记录. 注:还可以使用指针访问修改private数据成员的值: class Test {private:int x;int y; publi ...
- [转]asp.net导出数据到Excel的三种方法
原文出处:asp.net导出数据到Excel的几种方法(1/3) .asp.net导出数据到Excel的几种方法(2/3).asp.net导出数据到Excel的几种方法(3/3) asp.net导出到 ...
- 芯片数据的差异分析主要包括三种方法 ANCOVA进行差异分析 为何不用deseq2
Shared Gene Expression Alterations in Schizophrenia and Bipolar Disorder Expression of cilium-associ ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C# 1) insert循环插入: 2) sqldataadapter.update(dataset,tablename ...
- 在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别
在 C# 中,(int),Int32.Parse() 和 Convert.toInt32() 三种方法有何区别? int 关键字表示一种整型,是32位的,它的 .NET Framework 类型为 S ...
- 机器学习中的矩阵求导的一点总结(三种方法求线性回归最佳参数)
机器学习中的矩阵求导的一点总结(三种方法求线性回归最佳参数) 转载于:https://blog.csdn.net/promisejia/article/details/80159619?ops_req ...
- python提取cad坐标_怎么提取cad中坐标?CAD批量提取坐标点的三种方法
经常有一些小伙伴问,CAD中怎么批量提取坐标点,今天给大家总结三种方法. 方法一:多段线顺序连接并提取. 1.多段线pl连接点: 2.li命令提取坐标: 3.将点位粘贴至excel,利用数据,分列,最 ...
- mysql 自增长id string_Mysql中获取刚插入的自增长id的三种方法归纳
我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. 但在多线程情况下,就不行了. 下面 ...
- 监控器sd卡初始化怎么恢复数据?有这三种方法可尝试
sd卡监控器数据能恢复吗?监控器sd卡初始化怎么恢复数据?如果您的监控器sd卡被初始化(格式化)导致数据丢失,建议立即停止使用sd卡,因为如果您继续使用sd卡,它可能会覆盖您要恢复的数据,导致无法恢复 ...
最新文章
- 绘制业务流程图:流程图绘制工具
- python pdf报告_Python实现html转换为pdf报告(生成pdf报告)功能示例
- 撸一段 SQL ? 还是撸一段代码?
- python简单词频统计_python简单词频统计
- Context.PROVIDER_URL 逗号间隔
- java cron工具类_Java工具类之:包装类
- 想系统化提升自己产品能力,就要读这些书籍
- Spring Boot一个极简且完整的后台框架
- centos 6 install EPEL
- 重构之以委托取代继承
- redis jar包_「建议收藏」手把手教你从零搭建一个redis服务
- mysql 存储过程案列一个。
- 【转】勤奋小孩的遗言:没有理由不坚持。
- VS2015安装提示“安装包丢失或损坏”
- Raytrace学习的阶段性总结
- vlan间路由+静态路由+NAT(PAT+静态NAT)综合实验
- 解决Ubuntu 20.04 虚拟机克隆出多台造成的IP地址冲突的问题
- Twrp recovery 编译教程(译文)
- Linux操作手机端
- 软件测试之冒烟测试中易犯的三个误区--新梦想软件测试
热门文章
- 用Transformer实现OCR字符识别!
- 科研指导:深度学习的应用研究课程
- 最新数据分析教程资源合集(案例、数据集、SQL教程、分析样板、面经、简历、PY教程... )...
- 一个「PPT」框架,让超大模型调参变简单:清华刘知远、黄民烈团队力作
- 86岁还在录网课:MIT教授Gilbert Strang最新「线性代数」课程上线
- 博弈论速成指南:那些融入深度学习的经典想法和新思路
- 进程的介绍(概念、作用)
- 栈溢出原理 小记 基础中的基础~~
- 电路交换-报文交换-分组交换- 分组交换包括:虚电路和数据报
- Python报错TypeError: Tuple or struct_time argument required