PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ - Frage zur Vererbung


Baalzamon
2011-10-11, 19:19:05
Hallo,

letztes Wochenende ist mir beim programmieren ein Verhalten aufgefallen, von dem ich intuitiv gesagt hätte das es so nicht vorkommen sollte.

Ich habe Zwei Klassen ClassA und ClassB, wobei ClassB von ClassA abgeleitet ist. ClassA hat eine Methode void print() und ClassB eine Methode void print(std::string msg).

Ich hätte erwartet, das bei einer Instanz von ClassB beide Methoden sichtbar sind.

Dem ist aber nicht so, ClassB kennt nur seine eigene Methode. Benennt man eine der beiden Methoden um, so sind beide sichtbar.

Irgendwie stehe ich da gerade auf dem Schlauch. Jemand eine Idee warum das so ist?

Trap
2011-10-11, 20:13:57
Im C++ Standard (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf) gibt es im Kapitel 10.2 die genaue Erklärung wieso das so ist. Und auf Seite 232/233 im Kapitel 10 ist ein Beispiel mit den möglichen Kombinationen.

Kurz gesagt: Überladung funktioniert nur innerhalb einer Klasse, bei Vererbung verstecken neue Definitionen die Methoden der Basisklasse (wenn man nicht extra Aufwand betreibt um die Methoden der Basisklasse wieder sichtbar zu machen).

Tiamat
2011-10-11, 22:02:05
Hi,
ich hab mir einmal mit folgendem ausgeholfen :

class Derived : Base {
typedef Base super;
}

Dann lässt sich über den Scope-Operator auch die Methoden der Basisklasse nutzen

Gruß
Tiamat

Trap
2011-10-11, 22:21:30
Man kann auch mit
//in ClassB
using ClassA::print;
die Methode sichtbar machen.

Gast
2011-10-11, 23:12:01
Man kann auch mit
//in ClassB
using ClassA::print;
die Methode sichtbar machen.
Oder einfach an der entsprechende Stelle (in einer Methode von ClassB)

ClassA::print()

aufrufen

Baalzamon
2011-10-12, 10:36:39
Danke euch. :)

Ich habe das mal im C++ Standard nachgelesen (schönes Dokument, danke Trap).