抽象类之间的组合

Composition between abstract classes

本文关键字:组合 之间 抽象类      更新时间:2023-10-16

是否有可能在两个抽象类之间建立组合(而不是聚合)关系?

我不这么认为,因为我不能实例化一个抽象类。但也许有一个简单的方法。

是:

class A
{
    virtual ~A() = 0;
};

class B
{
    virtual ~B() = 0;
    A* mA;
};

允许有指向抽象类型的指针

可以使用指向另一个类的指针或引用。例如:

class A {
public:
  virtual void m() = 0;
  virtual ~A() { }
};
class B {
public:
  virtual void m() = 0;
  virtual ~A() { }
private:
  boost::scoped_ptr<A> a;
};

在c++ 11中,您可以使用std::unique_ptr代替。注意,这使得B不可复制——这在使用子类型多态性的类中比较常见。