Материалы книги получены с http://www.itlibitum.ru/
Ссылки на указатели
Производящая функция не обязана возвращать Foo*. С таким же успехом подойдет и Foo&.
class Foo {
public:
static Foo& make(); // Производящая функция
virtual void do_something() = 0;
virtual void do_something_else() = 0;
};
// В файле foo.cpp
class PFoo : public Foo {
private:
Foo* foo;
public:
PFoo(Foo* f) : foo(f) {}
virtual void do_something() { foo->do_something(); }
virtual void do_something_else() { foo->do_something_else(); }
};
class Bar : public Foo {
// Все для производного класса
};
Foo& Foo::make()
{
return *(new PFoo(new Foo));
}
Единственная проблема заключается в том, что копирование с помощью конструктора копий, как вы вскоре убедитесь, строго воспрещается. И все же люди, вооруженные оператором &, неизменно пытаются копировать объект. С оператором * соблазн намного слабее. Во всем остальном выбор - дело вкуса.
Назад Содержание Далее
|