问题描述
#include <iostream>class test{ private:struct tes{ int te;};tes t; public:test(){ t.te = 5;}tes* xixi(){ return &t;}};int main(void){ test test1; std::cout << test1.xixi()->te; return 0;}
代码如上, 类test中有一个私有的结构体tes, 但是为什么我能够在外界直接获取结构体内的属性呢? 该结构体对于外界而言不是不可见的吗?
问题解答
回答1:因为你通过xixi()把结构体公开了,你直接获取到了结构体对象的地址,就可以获得结构体的属性了,但是你不能直接访问到那个结构体。补充一个例子。。。。这个例子用来表达表达我的想法,局部static变量,在外面修改。
#include <iostream>using namespace std;int* func(){ static int a = 2; cout << a << endl; return &a;}int main(){ int* ptr = func(); *ptr = 3; func(); return 0;}回答2:
因为你的xixi()是public的,而其返回值是tes*类型,也就是这个时候tes类型被暴露给外界了