回答
#define private public
#define protected public
#define class struct
你去那裏:-)
'template
這太棒了。 +1 – kikito 2010-06-09 09:02:03
@ega:實際上,這只是一個笑話。爲什麼有人想要這樣做?封裝是一件好事!如果你真的需要碰到私人部件,那麼你的設計是有缺陷的,而且你必須重構。 – fredoverflow 2010-06-09 09:09:49
您沒有得到*。封裝是C++的一項功能。
**除非你做一些黑暗,邪惡,和魔術。*
請參閱[FredOverflow的答案。](http://stackoverflow.com/questions/3002101/how-can-i-violate-encapsulation-property/3004223#3004223)他是這種邪惡的表現。 :) – 2010-06-09 17:14:38
另請參閱[evil:adj。 (來自Jargon文件。)](http://catb.org/jargon/html/E/evil.html) – 2010-06-09 17:16:37
您更改定義有問題的類進行所需的公衆成員的標題。換句話說,你移除了封裝。不要這樣做。
我會認爲是「破壞封裝」你的意思是「從類外部訪問私有成員」。
我知道使用friend classes/methods「合法」做到這一點的唯一方法。
然而,爲了使用它們,你將需要修改其具有私有成員的類 - 此時它可能比較簡單,只是重新定義從private
一些方法來protected
或public
,視情況而定。
朋友不會破壞封裝,因爲你可以選擇你的朋友是誰。沒有你的同意,不會有人可以成爲你的朋友。 – fredoverflow 2010-06-09 09:16:06
請看我的第一句話 - 我將「封裝」定義爲「無法從外部訪問私人成員」。這不是一個「標準」或「完整」的定義,但我懷疑這是OP在他的問題上使用的那個。 – kikito 2010-06-09 09:19:41
設計一個鏡像類,該類與您試圖訪問非公共成員的類具有相同的成員,並將該類的對象強制轉換爲鏡像類。
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;
}
這當然不能保證工作。
- 1. 函數參數是否違反封裝?
- 2. 模板模式違反封裝?
- 3. 這兩個類是否違反封裝?
- 4. 屬性和封裝
- 5. 有沒有可能在ABAP中違反反射封裝?
- 6. 爲封裝創建屬性
- 7. 違反了「唯一粒子屬性」
- 8. 嚴格遵守單一責任原則是否違反封裝?
- 9. 傳遞參數給構造函數違反封裝?
- 10. 客戶端鎖定是否違反同步策略的封裝?
- 11. 我應該如何在OpenGL中使用變量而不違反封裝
- 12. 完整性違反違規:Magento
- 13. 封裝性能
- 14. 域對象屬性和封裝
- 15. 在NetBeans 8中封裝JavaFX屬性?
- 16. 如何封裝具有類屬性的列表?
- 17. java.lang.SecurityException:密封違規:
- 18. 這是一個違反紅寶石封裝的簡單方法嗎?
- 19. 密封違規:包oracle.net.ns是密封的
- 20. 裝飾者模式是否違反SRP?
- 21. 安裝一把umbraco包違反網站
- 22. 設置屬性值違反開關原則驗證
- 23. 如何在不違反封裝的情況下合法訪問和修改私有字段矢量和地圖?
- 24. 關於封裝:性能
- 25. 值違反有效性規則
- 26. 完整性約束(LEETO14.SYS_C00414504)違反
- 27. Laravel - 完整性違反違規:1062重複輸入
- 28. 違反約束?
- 29. 堆違反
- 30. PMD UselessParentheses違反
你爲什麼要這麼做? – 2010-06-08 23:36:55
好奇心殺死了貓你知道... – 2010-06-08 23:56:27
我不認爲這是值得-1。 +1將其刪除。 – kikito 2010-06-10 08:02:44