我怎样才能违反封装属性而不产生编译时错误?(在C++中)太好奇了这是我的一位教授问我的问题。请不要误会。这是在我们讨论编译器错误的时候被问到的
a64a0gku1#
#define private public #define protected public #define class struct
There you go:-)
xvw2m8pv2#
我假设你所说的“违反封装”是指“从类外部访问私有成员”。我所知道的“合法”的唯一方法是使用friend classes / methods。然而,为了使用它们,你需要修改有私有成员的类--此时,根据情况,将一些方法从private重新定义为protected或public可能会更简单。
private
protected
public
gt0wga4j3#
你不能 *。封装是C++的一个特性。
**除非你做了黑暗邪恶和魔法的事 *
w51jfk4q4#
您可以更改定义相关类的标头,以使所需的成员成为公共成员。换句话说,您删除了封装。别这样
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; }
这当然不能保证工作。
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; }
6条答案
按热度按时间a64a0gku1#
There you go:-)
xvw2m8pv2#
我假设你所说的“违反封装”是指“从类外部访问私有成员”。
我所知道的“合法”的唯一方法是使用friend classes / methods。
然而,为了使用它们,你需要修改有私有成员的类--此时,根据情况,将一些方法从
private
重新定义为protected
或public
可能会更简单。gt0wga4j3#
你不能 *。封装是C++的一个特性。
**除非你做了黑暗邪恶和魔法的事 *
w51jfk4q4#
您可以更改定义相关类的标头,以使所需的成员成为公共成员。换句话说,您删除了封装。别这样
h6my8fg25#
设计一个镜像类,它的成员与您试图访问的非公共成员相同,并将所述类的对象硬转换到镜像类。
这当然不能保证工作。
gab6jxml6#
下面是一个邪恶的c函数,它访问C类/C结构的私有属性,只要你知道结构或class 0的内存布局