[英]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.