Zum Inhalt springen

C++ Interfacemethode überladen


FinalFantasy

Empfohlene Beiträge

Hi,

ich habe hier gerade ein kleines Konstrukt zustande gebracht, bei dem ich nicht verstehe, wieso es nicht funktioniert.

Das Ausgangskonstrukt war so:


class Interface {
public:
virtual void load(DomNode node) = 0;
virtual void save(DomNode node) = 0;
}

class A : public Interface {
public:
virtual void load(DomNode node) { MACH WAS };
virtual void save(DomNode node) { MACH WAS };
}
[/PHP]

Aber da Programmierer ja faul sind, wollte ich mein Interface um eine Methode erweitern, die mir das Laden direkt aus einer Datei erlaubt.

Also so:

[PHP]
class Interface {
public:
virtual void load(DomNode node) = 0;
virtual void save(DomNode node) = 0;

void load(String Dateiname) {
File file(Dateiname);
if(file.open()) {
DomDocument doc(file.readAll());
load(doc.rootElement());
}

}
}

Damit habe ich die load-Methode ja überladen, auch wenn eine virtuell abstrakt ist.

(Ich habe schon versucht, die zweite load-Methode auch virtuell zu machen, obwohl das nicht nötig wäre, bringt aber auch keine Besserung)

Was ich jetzt NICHT funktioniert:


A a;
a.load("test.xml");
[/PHP]

Fehlermeldung: const char[] kann nicht in DomNode konvertiert werden.

Folgendes Konstrukt klappt aber:

[PHP]
A a;
Interface* if = dynamic_cast<Interface*>(&a);
if->load("test.xml");

Wieso ist die load(string)-Methode in der abgeleiteten Klasse nicht verfügbar?

Wenn ich die load(string)-Methode im Interface allerdings loadFromFile() nenne (und damit die Methode nicht mehr überlade), klappt es auch wie es soll.

Ist übrigens alles Pseudocode aber wie gesagt, es handelt sich um C++.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Suche nach Überladungen geht in C++ nicht über Vererbungsbeziehungen hinweg. Wenn in A eine Methode mit passendem Namen vorhanden ist, werden Basisklassen nicht weiter nach Überladungen durchsucht.

Das kannst du durch eine using-Deklaration umgehen:

class A : public Interface
{
using Interface::load;
// ...[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...