[英]How can I Violate Encapsulation property?
如何在没有编译时错误的情况下违反Encapsulation属性? (在C ++中)
很好奇..
这实际上是我的一位教授提出的问题。请不要误解。 当我们讨论编译器错误的时候,有人问这个问题。
#define private public
#define protected public
#define class struct
你去了:-)
我假设通过“违反封装”意味着“从类外部访问私有成员”。
据我所知,“合法地”做到这一点的唯一方法是使用朋友类/方法 。
但是,要使用它们,您将需要修改具有私有成员的类-此时,根据情况,仅将一些方法从private
重新定义为protected
或public
可能更简单。
你不会*。 封装是C ++的功能。
**除非您做一些黑暗,邪恶和魔法的事情。*
您可以更改定义相关类的标题,以使所需的成员公开。 换句话说,您删除了封装。 不要这样
设计一个镜像类,该镜像类具有与您尝试访问其非公共成员的类相同的成员,并将该类的对象硬铸到镜像类。
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;
}
这当然不能保证有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.