由怎么不用友元来访问修改类的私有成员想到的问题。

Adonis321 2016-04-06 05:16:23
#include <iostream>
#include<string>

using namespace std;

class Point
{
//friend class v;
public:
Point(const string &ss, const int &ii) :m_nPointCount(ii),s(ss)
{
//m_nPointCount++;
}
~Point()
{
//m_nPointCount--;
}

private:
int m_nPointCount = 0;
string s = "world";


};

class v{
public:
v(const string &ss, const int &ii) :m_nPointCount(ii), s(ss)
{
//m_nPointCount++;
}
~v()
{
//m_nPointCount--;
}

public:
int m_nPointCount = 0;
string s = "world";

};


void main()
{

Point vv("leee",0);
v aa("leee", 0);

cout << *(string*)((Point*)(&vv) + ((v*)(&aa.s) - (v*)(&aa))) << endl;

}

怎么输出错误啊?但是如果我把int m_nPointCount = 0;去掉改成cout << *(string*)((Point*)(&vv)) << endl;就对了。求大神啊!!
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 版主 2016-04-07
  • 打赏
  • 举报
回复
引用 4 楼 wang268218 的回复:
引用 3 楼 lianshaohua 的回复:
这样做有什么意义呢?在项目中出现这样的代码有可能会被XX的
我知道没有用啊,我就是想弄明白内存布局。
去看《C++深度探索对象模型》,你这样试出来了,也只是某个编译器的…………
Adonis321 2016-04-06
  • 打赏
  • 举报
回复
引用 3 楼 lianshaohua 的回复:
这样做有什么意义呢?在项目中出现这样的代码有可能会被XX的
我知道没有用啊,我就是想弄明白内存布局。
ztenv 版主 2016-04-06
  • 打赏
  • 举报
回复
这样做有什么意义呢?在项目中出现这样的代码有可能会被XX的
Adonis321 2016-04-06
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
要走正道,这种方式不可取。
我知道,不可取,但是我就是想知道为什么第一种为什么输出错误?一群乱码。。。。。。
  • 打赏
  • 举报
回复
要走正道,这种方式不可取。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧