Ist es nicht möglich, eine abstrakte Klasse hochzustufen und nicht jedes Mal zu ändern, wenn eine Klasse daraus abgeleitet wird?

#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

Der Compiler sagt

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’

Wegen dieses Problems muss ich die Abs-Klasse jedes Mal um Funktionen erweitern, wenn ich eine neue abgeleitete Klasse erstelle, die von ihr erbt. (Upcasting ist für mich obligatorisch. Das von mir geplante Programm erfordert dies.) . Ich möchte die Basisklasse nicht berühren, wenn sie erst einmal erstellt wurde. Verstößt dieses Problem nicht gegen das Prinzip, dass Sie eine einmal erstellte Basisklasse niemals ändern müssen. Gibt es eine Möglichkeit, dieses Problem zu lösen? PS: Ich habe das Factory-Design-Pattern und das Prototyp-Design-Pattern gesehen, aber beide scheinen nicht in der Lage zu sein, es zu lösen.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage