Auch wenn du das machen kannst, was würde dieser Zeiger bedeuten? Wenn irgendein Teil deiner Anwendung den Zeiger auf 'entweder a
oder b
' erhält, kann er nicht viel damit anfangen, es sei denn, du gibst zusätzliche Typinformationen.
Zusätzliche Typinformationen bereitzustellen führt zu Client-Code wie
if( p->type == 'a' ) {
... spezifische Dinge für a
} else if( p->type == 'b' ) {
... spezifische Dinge für b
} ...
Was nicht sehr nützlich ist.
Es wäre besser, die 'typspezifische Eigenschaft' dem Objekt selbst zu übergeben, was die Natur des objektorientierten Designs ist, und C++ hat dafür ein sehr gutes Typsystem.
class Interface {
public:
virtual void doClientStuff() = 0; //
virtual ~theInterface(){};
};
class A : public Interface {
virtual void doClientStuff(){ ... spezifische Dinge für a }
};
class B : public Interface {
virtual void doClientStuff(){ ... spezifische Dinge für b }
};
Und dann wird dein Client-Code weniger typbewusst, da das Typumschalten von C++ für dich erledigt wird.
void clientCode( Interface* einObjekt ) {
einObjekt->doClientStuff();
}
Interface* i = new A();
Interface* j = new B();
clientCode( i );
clientCOde( j );