Zwingen ein Interface zu benutzen

Gast #1300946
// Abstrakte Klasse oder Interface
class Ausgabe
{
public:
  virtual void showDate(int year, int month, int day) = 0;
};

//Abgeleitete Klasse implementiert die Interface
class GerstdDateout : public Ausgabe
{
public:
  virtual void showDate(int year, int month, int day)
  {
    cout << "";
  }
};


Hallo gibt es eigentlich eine möglichkeit einen direkten zugriff auf
showDate zu verhindern ? so das man immer über das Interface gehen muss?
weil ich kann ja schreiben:

GerstdDateout ger;
ger.showDate(2000,11,11);


und das ist ja nicht Sinn und Zweck
#1300994
Karl heinz Buchegger schrieb:
> Fummel schrieb:
>
>
>> und das ist ja nicht Sinn und Zweck
>
> Kannst du das näher erläutern?
> Warum soll das nicht Sinn und Zweck sein?

Was ich meine ist:

Das Interface zwingt GerstdDateout die Funktion zu implementieren.
Zur Compilezeit ist der exakte Datentyp des Objektes bekannt. Auch bei 
einem forciertem Aufruf über Pointer

GerstdDateout ger;
((Ausgabe*)ger)->showDate(2000,11,11);

wird diese Funktion aufgerufen. Und zwar in allen Fällen (weil ja der 
exakte Datentyp des Objektes feststeht)

Was bringt also ein Aufruf über die virtuelle Funktion, was ein direkter 
Aufruf nicht bringt (ausser längerer Laufzeit)?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.