Композиция между абстрактными классами - PullRequest
2 голосов
/ 08 декабря 2011

Можно ли построить отношения композиции (не агрегации) между двумя абстрактными классами?

Я так не думаю, потому что не могу создать экземпляр абстрактного класса. Но, возможно, есть простой способ сделать это.

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

Да:

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


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

Вам разрешено иметь указатели на абстрактные типы.

0 голосов
/ 08 декабря 2011

Вы можете использовать указатель или ссылку на другой класс. Например:

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 некопируемым - что несколько характерно для классов, использующих полиморфизм подтипа.

...