вторник, 4 февраля 2014 г.

Виртуальный конструктор или прототип

Функцию член, предоставляющую возможность клонирования объекта, в C++ традиционно называют виртуальным конструктором. Конечно, виртуальных конструкторов не существует, но при создании копии объекта обычно осуществляется непрямой вызов конструктора копий класса через виртуальную функцию, что создает эффект виртуального конструктора.

class Base
{
public:
  virtual ~Base(){};
  virtual void Say() = 0;
  virtual Base* clone() = 0;
};

class A : public Base
{
public:
  ~A() {}
  A(){}
  A(const A& ){}
  virtual void Say() { cout << "Class A\n"; }
  virtual A* clone() { new A(*this); }
};

class B : public Base
{
public:
  ~B() {}
  B(){}
  B(const B& ){}
  virtual void Say() { cout << "Class B\n"; }
  virtual B* clone() { new B(*this); }
};

int main()
{
  Base* a = new A;
  Base* b = a->clone();
  delete a;
  b->Say();
 
  return 0;
}

Комментариев нет:

Отправить комментарий