c++ 我如何才能违反封装属性?

fbcarpbf  于 2023-05-30  发布在  其他
关注(0)|答案(6)|浏览(120)

我怎样才能违反封装属性而不产生编译时错误?(在C++中)
太好奇了
这是我的一位教授问我的问题。请不要误会。这是在我们讨论编译器错误的时候被问到的

a64a0gku

a64a0gku1#

#define private public
#define protected public
#define class struct

There you go:-)

xvw2m8pv

xvw2m8pv2#

我假设你所说的“违反封装”是指“从类外部访问私有成员”。
我所知道的“合法”的唯一方法是使用friend classes / methods
然而,为了使用它们,你需要修改有私有成员的类--此时,根据情况,将一些方法从private重新定义为protectedpublic可能会更简单。

gt0wga4j

gt0wga4j3#

你不能 *。封装是C++的一个特性。

**除非你做了黑暗邪恶和魔法的事 *

w51jfk4q

w51jfk4q4#

您可以更改定义相关类的标头,以使所需的成员成为公共成员。换句话说,您删除了封装。别这样

h6my8fg2

h6my8fg25#

设计一个镜像类,它的成员与您试图访问的非公共成员相同,并将所述类的对象硬转换到镜像类。

class original
{
  private: int x,y,z;
  public: int dosomething();
};

class mirror
{
  public: int x,y,z;
};

int main()
{
  original *o = new original;
  mirror *m = (mirror*)o;
  m->x = 10;
}

这当然不能保证工作。

gab6jxml

gab6jxml6#

下面是一个邪恶的c函数,它访问C类/C结构的私有属性,只要你知道结构或class 0的内存布局

template<class V,class T>
void accessClassProperty(T* object,V* outValue,int offset){
   char* buf = (char*)object;
   V value = *((V*)&buf[offset]);
   *outValue = value;
}

相关问题