作者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