По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Выбор типа указываемого объекта во время конструирования
Если наш ведущий указатель может создать объект производного класса во время конструирования, почему бы не разрешить ему свободно выбрать нужный тип из нескольких производных классов?
// В файле Foo.cpp
class DeirvedFromFoo : public Foo { ... };
class AlsoDerivedFromFoo : public Foo { ... };
PFoo::PFoo(bool x) : foo(x ? new DerivedFromFoo : new AlsoDerivedFromFoo) {}
Вообще говоря, интерфейсный указатель может выбрать любой производный класс на основании сведений, доступных во время конструирования. Клиент об этом ничего не знает, поскольку все происходящее скрывается за интерфейсным указателем.
Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.