看板 EE_DSnP 關於我們 聯絡資訊
: 以下是不 OK 的... : : // 到這行 class B 還沒定義完全 : class A : { : public: : void f(B b1); // B 定義不完全 : B _b2; // B 定義不完全 : A _d1; // A 不能包 A : : private: : void g(B b3); // B 定義不完全 : B _b4; // B 定義不完全 : A _d2; // 宣告成 private 也不能包 A : }; : : ---- : : 總而言之, : : class A 的 member function 可以拿 A 的物件當作參數, : : 而且可以直接 access 他所有的 public and private data and functions. : : : 而 class A 裏面不可以用 A 的 object 當作 data member, : : 或是其他尚未定義清楚的 class 的 object 也不可以. : : (除非是 pointer 或是 reference type) : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.112.21.241 : 推 Knossos:最後一行的那兩個方式...可以請哪位大大給個例子嗎?3Q 10/30 21:30 : 推 flarehunter:像是linked list 要有一個指向下個節點的pointer嗎? 10/30 21:52 Yes, for example, ======================================= // Suppose class ListNode is not defined up to this point // Forward declaration class ListNode; class List { public: List(ListNode* n) : _begin(n) {} private: ListNode* _begin; }; ================================= For reference type data member, it must be initialized in the memebr initialization list: class B; class A { public: A(B& n) : _b(n) { } private: B& _b; }; class B { }; int main() { B b; A a(b); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.121.129.10