繁体   English   中英

如何违反封装属性?

[英]How can I Violate Encapsulation property?

如何在没有编译时错误的情况下违反Encapsulation属性? (在C ++中)

很好奇..

这实际上是我的一位教授提出的问题。请不要误解。 当我们讨论编译器错误的时候,有人问这个问题。

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

你去了:-)

我假设通过“违反封装”意味着“从类外部访问私有成员”。

据我所知,“合法地”做到这一点的唯一方法是使用朋友类/方法

但是,要使用它们,您将需要修改具有私有成员的类-此时,根据情况,仅将一些方法从private重新定义为protectedpublic可能更简单。

你不会*。 封装是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM