面向对象

面向对象

Composition(组合),表示 has-a

class B 中有一个 A 的 object

创建 B 的对象的时候会默认调用 A 的构造函数,如果需要调用 A 的有参数的构造函数,需要指明。

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

  • 数据继承:B 中有 A 的 所有数据。被 protect 修饰的除外。
  • 函数继承:B 中没有 A 中的函数, B 作为 A 的派生类, B 拥有 A 中函数的调用权。
// 例如:A 表示鸟
class A {
    ...
};

// 例如:B 表示鹦鹉
class B : public A {
    ...
}

Delegation(委托) Composition by reference

编译防火墙,当 A 改动的时候,编译的时候无需再次编译 B,只需要编译 A 就好了。

class A {
    ...
};

class B {
private:
    A* a;

    ...
};

你可能感兴趣的:(面向对象)