1. 關鍵詞的困擾函數
(1)關鍵詞 struct 自己並不必定要象徵其後隨之聲明的任何東西。佈局
(2)能夠使用 struct 代替 class,但仍聲明 public、protected、private等,以及一個徹底的 public 接口,virtual functions,單一繼承、多重繼承、虛繼承等。spa
(3)C 所支持的 struct 和 C++ 所支持的 class 間,有一個觀念上的重要差別。關鍵詞自己不提供這種差別,這兩種聲明的觀念上的意義取決去對聲明自己的檢驗。code
(4)struct 關鍵詞的使用實現了 C 的數據萃取觀念,而 class 關鍵詞實現的是 C++ 的ADT 觀念,則「不一致性」是一種錯誤的語言用法。例如:排序
//這兩個聲明會形成矛盾的存儲空間 static int foo; extern int foo;
(5)class 的真正特性是由聲明的自己(declaration body)來決定的。繼承
2. 策略性正確的 struct接口
(1)C++ 中凡處於同一個 access section 的數據,要保證其聲明次序出如今內存佈局中,而被放置在多個 access sections 的數據。排序次序則不必定。內存
(2)組合,而非繼承,纔是把 C 和 C++ 結合在一個的惟一可行方法(conversion 運算符),例如:it
struct C_point { }; class CPoint { public: operator C_point() { return m_cpoint; } private: C_point m_cpoint; };
(3)C 的 struct 在 C++ 中的一個合理用途:須要傳遞「一個複雜的 class object 的所有或部分」到某個 C 函數中去,struct 能夠把數據封裝起來,並保證和 C 有兼容的空間佈局。(前提是在組合的狀況下)io