Правила программирования на Си и Си++



         

101. Си++ — это не Smalltalk: избегайте общего класса object - часть 5


должен наследуемый последним производный класс (tree_list_node). Хотя это действительно плохая мысль —

требовать, чтобы класс знал о чем-либо в иерархии, кроме своих непосредственных родителей — иначе было бы слишком сильное внутреннее связывание.

Обратная сторона той же самой проблемы проявляется, если у вас есть виртуальные функции как в следующем коде:

class persistent

{

public:

   virtual flush() = 0;

};

class doc1: virtual public persistent

{

public:

   virtual flush() { /* сохранить данные doc1 на диске */ }

};

class doc2: virtual public

persistent

{

public:

virtual flush() { /* сохранить данные doc2 на диске */ }

};

class superdoc : public doc1, public

doc2 {};

persistent *p = new superdoc();

p->flush();      // ОШИБКА: какая из функций flush() вызвана?




Содержание  Назад  Вперед