Разве нет способа превратить в абстрактный класс и не изменять его каждый раз, когда класс выводится из него?

#include<iostream>
using namespace std;

class Abs
{
        public:
        virtual void hi()=0;
};

class B:public Abs
{
        public:
        void hi() {cout<<"B Hi"<<endl;}
        void bye() {cout<<"B Bye"<<endl;}
};
class C:public Abs
{
        public:
        void hi() {cout<<"C Hi"<<endl;}
        void sayonara() {cout<<"C Sayonara"<<endl;}
};

int main()
{
        Abs *bb=new B;
        bb->bye();
        Abs *cc=new C;
        cc->sayonara();
}//main

Компилятор говорит

test2.cpp: In function ‘int main()’:
test2.cpp:26: error: ‘class Abs’ has no member named ‘bye’
test2.cpp:28: error: ‘class Abs’ has no member named ‘sayonara’

Из-за этой проблемы мне придется добавлять функции в класс Abs каждый раз, когда я создаю новый производный класс, который наследуется от него (для меня это обязательное обновление. Планируемая программа требует, чтобы это было так). Я не хочу прикасаться к базовому классу после его создания. Не нарушает ли эта проблема принцип, согласно которому после создания базового класса вам не нужно будет его изменять никогда. Любой способ решить эту проблему? ps: я видел шаблон проектирования фабрики и шаблоны проектирования прототипа, но оба они не могут решить его.

Ответы на вопрос(5)

Ваш ответ на вопрос