作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [討論] 在 class A 裏面使用 class A ?
時間Tue Oct 30 23:13:33 2007
: 以下是不 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