?
freakC++ schrieb:
[...] das heißt es lässt sich kompilieren.
Nachdem man
#include <iostream>
#include <string.h>
using namespace std;
hinzufügt und die Mehrfach-Definitionen entfernt, kompiliert das Programm mit 5 Warnungen der Art
Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*«
Ich hatte Dein : CKlasse(Wort1,Wort2) am Ende von CUnterKlasse::CUnterKlasse(...) übersehen.
freakC++ schrieb:
Ist das denn immer so, dass die übergebenen Parameter an die Unterklasse automatische an die Oberklasse weitergegeben werden?
Nein. Nie automatisch. Dafür sind ja die Initialisierungslisten da.
freakC++ schrieb:
Wenn ich nicht möchte, dass die Variablen an CKlasse übergeben werden, sondern nur von CUNterklasse bearbeitet werden, dachte ich, dass ich die Variablen einfach umbenenne. Dann kommt jedoch ein Fehler:
CUnterklasse::CUnterklasse(char* NeuWort, char* NeuWort1, char* NeuWort2) : CKlasse(Wort1, Wort2)
{
Speichern(NeuWort, NeurWort1, NeuWort2); //So wollte ich bezweken, dass die VAriablen nicht an CKLasse übergeben werden, doch kommt ein Fehler!
} //Die Methode "Speichern" wird natürlich angepasst.
Was glaubst Du, was " : CKlasse(Wort1, Wort2) " macht? Es ist Teil der Konstruktordefinition. Du sagst hier, dass das CKlasse-Subobjekt mit dem Parametern Wort1 und Wort2 initialisiert werden soll, bevor der Rest ausgeführt wird. Ich habe das Gefühl, dass Dir das Konzept der Initialisierungslisten bei Konstruktoren fremd ist.
Dazu kommst, dass Du Zeiger vom Typ char* benutzt, um Stringkonstanten zu referenzieren statt mit const char* und std::string zu arbeiten. Du wirst wesentlich weniger Ärger mit std::string haben, als mit rohen char-Zeigern und Arrays. Beispielsweise gibt es bei Deinem Programm ein Problem, falls eine der Zeichenkettenkonstanten in main() mehr als 254 Zeichen besitzt.
Außerdem, ergibt es nicht viel Sinn Speichern als virtuell zu deklarieren. CUnterklasse::Speichern überschreibt jedenfalls nicht CKlasse::Speichern , da CUnterklasse::Speichern nur einen Parameter erwartet. Stattdessen "versteckt" diese Funktion die andere virtuelle aus der Basisklasse.