抽象类之间的组合

时间:2011-12-07 20:19:12

标签: c++ abstract composition

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

我不这么认为,因为我无法实例化一个抽象类。但也许有一种简单的方法可以做到这一点。

2 个答案:

答案 0 :(得分:4)

是:

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


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

您可以拥有指向抽象类型的指针。

答案 1 :(得分:0)

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

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不可复制 - 这对于使用子类型多态的类来说有点常见。