面向?qū)ο?/h2>
Composition(組合)凑阶,表示 has-a
class B 中有一個(gè) A 的 object
創(chuàng)建 B 的對象的時(shí)候會默認(rèn)調(diào)用 A 的構(gòu)造函數(shù)桩砰,如果需要調(diào)用 A 的有參數(shù)的構(gòu)造函數(shù)保礼,需要指明狸演。
class A{
private:
...
public:
A() { ... }
A(int a) { ... }
...
};
class B{
private:
A a;
public:
B(int a) : A(a) {
...
}
...
};
Inheritance(繼承)眉厨,表示 is-a
class B 是一種 A
- 數(shù)據(jù)繼承:B 中有 A 的 所有數(shù)據(jù)蕊玷。被 protect 修飾的除外。
- 函數(shù)繼承:B 中沒有 A 中的函數(shù)弥雹, B 作為 A 的派生類, B 擁有 A 中函數(shù)的調(diào)用權(quán)延届。
// 例如:A 表示鳥
class A {
...
};
// 例如:B 表示鸚鵡
class B : public A {
...
}
Delegation(委托) Composition by reference
編譯防火墻剪勿,當(dāng) A 改動的時(shí)候,編譯的時(shí)候無需再次編譯 B方庭,只需要編譯 A 就好了厕吉。
class A {
...
};
class B {
private:
A* a;
...
};