【发布时间】:2010-06-08 23:32:05
【问题描述】:
如何在不出现编译时错误的情况下违反封装属性? (在 C++ 中)
很好奇..
这实际上是我的一位教授提出的问题。请不要误解。 当我们讨论编译器错误时有人问过这个问题
【问题讨论】:
-
你为什么要这样做?
-
好奇心害死了你认识的猫……
-
我认为这不值得-1。 +1 删除它。
标签: c++
如何在不出现编译时错误的情况下违反封装属性? (在 C++ 中)
很好奇..
这实际上是我的一位教授提出的问题。请不要误解。 当我们讨论编译器错误时有人问过这个问题
【问题讨论】:
标签: c++
#define private public
#define protected public
#define class struct
你去 :-)
【讨论】:
template <class T> T youBrokeIt(const T& x) { return x; }
我假设“违反封装”是指“从类外部访问私有成员”。
据我所知,“合法”执行此操作的唯一方法是使用 friend classes / methods。
但是,为了使用它们,您需要修改具有私有成员的类 - 此时将一些方法从 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;
}
这当然不能保证有效。
【讨论】: