По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Снова о двойной передаче: промежуточные базовые классы
Приняв на вооружение производящие функции, мы легко повысим инкапсуляцию двойной передачи.
// В файле grandpa.h
class Grandpa {
public:
// Производящие функции и гомоморфный интерфейс
};
// В файле grandpa.cpp
class RealGrandpa : public Grandpa {
// Промежуточный гомоморфный базовый класс
protected:
// Функции двойной передачи
};
class Dad : public RealGrandpa { ... };
class AuntieEm : public RealGrandpa { ... };
Наличие производящих функций означает, что производные классы можно скрыть. Добавляя промежуточный базовый класс RealGrandpa, мы полностью прячем все жуткие подробности двойной передачи в файле .cpp. Никаких защищенных функций в файле .h!
Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.