Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Interface Beispiel absrakte Klasse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.01.2006, 21:47 Uhr
BorisDieKlinge



Hallo Jungs,
Ich schreib am Freitag ne Informatik C++ Klausur, und hab immer noch nicht verstanden was es sich mit Interface und Abstrakte klassen zu tunn haben in welcher berbindung sie stehen wie sie funktionieren???
Kann mir jemad ein Beispiel Machen + Quellcode für ein Interface und wie ich drauf zugreife?
und was genau eine abstrakte Klasse macht, wie sie ausiehst was sie mit dem Interface zu tun hat?
Wäre echt wichtig dankte im vorraus!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.01.2006, 22:34 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
grob gesehen ist ein Interface eine reine Schnittstelle die als Typ genutzt werden kann.
C++ bietet keine explizite Möglichkeit ein Interface zu deklarieren.Deshalb bildet man in C++ ein Interface mit einer abstrakten Klasse,die lediglich rein virtuelle Methoden enthält nach.
Jede Klasse die diesen "Interfacetypen" repräsentieren möchte muss dann von der abstrakten Klasse erben und die rein virtuellen Methoden implementieren.
Interfaces benutzt man wenn man bestimmte Eigenschaften,die unabhängig von irgendwelchen Klassenhierarchien sind unter einem bestimmten Typ ansprechen möchte.
So kann es z.B. sein dass irgendein Algorithmus voraussetzt dass ein als Parameter übergebenes Objekt serialisierbar ist.Dann ist der Typ des Funktions/Methodenparameters halt vom Typ ISerializable und jedes Objekt dass man dieser Funktion übergeben möchte muss dann halt dieses Interface implementieren..
Die Paradebeispiele für Programmiersprachen die "echte" Interfaces bieten sind sicherlich Java und C# und in in diesem Bereich wirst du auch wesentlich mehr Informationen finden.
Als kurzen und knappen Überblick kann ich dir folgendes anbieten:
www.kbs.uni-hannover.de/~steimann/published/JOT2005.pdf
Ist halt aus dem Java/C# Bereich...
Das Ganze ist so auf die Schnelle auch nicht zu erklären.
Am besten liest du dir mal den Artikel durch und fragst dann nochmal nach was unklar ist.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.01.2006, 22:44 Uhr
BorisDieKlinge



Kannst du mir diesen text mal mit quellcode verdetulichen?:

So kann es z.B. sein dass irgendein Algorithmus voraussetzt dass ein als Parameter übergebenes Objekt serialisierbar ist.Dann ist der Typ des Funktions/Methodenparameters halt vom Typ ISerializable und jedes Objekt dass man dieser Funktion übergeben möchte muss dann halt dieses Interface implementieren..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.01.2006, 23:00 Uhr
Spacelord
Hoffnungsloser Fall



C++:
#include <iostream>

//abstrakte Klasse um ein Interface zu simulieren
class ISerializable
{
public:
    virtual void serialize()=0;//rein virtuell.... muss von Subklassen überschrieben werden
};


class foo:public ISerializable
{
public:
    //serialize implementieren
    virtual void serialize()
    {
        //nehmen wir mal an hier würde jetzt was gemacht dass zum serialisieren eines foo Objekts noetig waere
        std::cout<<"hier wuerde der Code zum serialisieren von foo ausgefuehrt"<<std::endl;
    }

    void blablub()
    {
        std::cout<<"irgend ne andere Methode die aber nichts mit dem Interface zu tun hat"<<std::endl;
    }
};


class bar:public ISerializable
{
public:
    //serialize implementieren
    virtual void serialize()
    {
        std::cout<<"hier wuerde der Code zum serialisieren von bar ausgefuehrt"<<std::endl;
    }

    void dummy()
    {
        std::cout<<"irgend ne andere Methode die aber nichts mit dem Interface zu tun hat"<<std::endl;
    }
};

//Funktion die nen Objekt vom Typ ISerializable erwartet
//der ist es vollkommen wurscht ob das Objekt vom Typ foo oder bar ist
void da_func(ISerializable& s)
{
    s.serialize();
}

int main()
{
    foo f;
    bar b;
    da_func(f);
    da_func(b);
    f.blablub();

    return 0;
}




MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.01.2006, 23:04 Uhr
BorisDieKlinge



hey danke.. jetzt versteh ichs schon besser muss die klasse ISerializable nich abstract sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.01.2006, 23:11 Uhr
Spacelord
Hoffnungsloser Fall


Das ist sie doch.
Dadurch dass die methode serialize rein virtuell ist wird es dir nicht gelingen ein Exemplar von ISerializable zu erstellen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.01.2006, 23:23 Uhr
Spacelord
Hoffnungsloser Fall


Nur um das nochmal klar zu stellen.
Diese C++ Geschichte mit abstrakten Klassen ist nur ne Notlösung weil die Sprache das Interfacekonzept nicht direkt unterstützt!
Deshalb wäre es schon sinnvoll sich zu dem Thema auch mal nen paar Java Infos durchzulesen (oder halt den Artikel den ich weiter oben gepostet hatte ).

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: