Допустим есть 3 класса:
Круглый, Цветной, Умный, при этом Круглый и Цветной имеют общий базовый класс, в общем случае может быть как прямой так и через несколько классов (например, QObject)
У класса Умный есть методы:
Раскрывающийся текст
добавитьЦветные(список<Цветной> цветные);
установитьКруглый(Круглый круглый);
установитьКруглый(Круглый круглый);
Иногда требуется ещё один класс, который в программе ведёт себя двояко, то как Круглый, то как Цветной.
Выходил из положения так (на примере Умного):
Раскрывающийся текст
добавитьЦветные(список<Цветной> цветные);
добавитьЦветные(список<Двоякий> цветные); // перегруженный метод
установитьКруглый(Круглый круглый);
установитьКруглый(Двоякий круглый); // перегруженный метод
добавитьЦветные(список<Двоякий> цветные); // перегруженный метод
установитьКруглый(Круглый круглый);
установитьКруглый(Двоякий круглый); // перегруженный метод
Как бы так извернутся, чтобы получить Двоякий класс, который можно было бы применять и вместо Цветного и вместо Круглого, не создавая перегруженных версий функций у класса Умный?