mikrocontroller.net

Forum: PC-Programmierung Zwingen ein Interface zu benutzen


Autor: Fummel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
class GerstdDateout : private Ausgabe

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)?

Autor: Fummel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So hab ich es nocht nicht gesehen also wäre es nicht unbedingt falsch

es direkt aufzurufen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.