簡體   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