Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » erben

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
30.01.2006, 11:08 Uhr
huckleberry



gruetzi,

das prinzip von vererbung usw habe ich alles soweit verstanden. ich habe da eine frage zur notation.
da steht class bus : public sc_channel, public dies, public jenes { ...


C++:
class bus_write_if : public sc_interface {
    public:
        virtual void write( unsigned int u ) = 0;
}; // class bus_write_if

class bus_read_if : public sc_interface {
    public:
        virtual void read( unsigned int& u) = 0;
}; // class bus_write_if

class bus : public sc_channel, public bus_write_if, public bus_read_if {
    public:
        bus( sc_module_name name ) : sc_channel(name),delay(5,SC_NS) {
            error_prob = 0.02; sc_trace(tracefile, value, "BUS");
        } // conrtuctor
    
        virtual const sc_event& default_event() const {
            return bus_event;
        }
        
        virtual void write( unsigned int u ) {
            if( rand() < (error_prob * RAND_MAX) ) {
                 u = u ^ ( 1 <<
                     (rand()%(sizeof(unsigned int)*8)) );
            } // if
            wait( delay );
            value = u;
            bus_event.notify();
        } // write
    
        virtual void read( unsigned int& u ) { u = value; }
        // read
    
    private:
        sc_time delay;
        double error_prob;
        sc_event bus_event;
        unsigned int value;
}; // class bus




ich weiss auch dass es in c++ mehrfachvererbung gibt (eine neue klasse erbt von 2 klassen gleichzeitig), was aber kaum benutzt wird (da zu fehleranfaellig).
von wem erbt die klasse bus? oder erbt sie HIER gar nicht? ich verstehe die syntax nicht.


C++:
class A : public B {...

(*)
soll ja, soweit ich verstanden habe, bedeuten, dass A von B erbt? und

C++:
class A : public B, public C, public D{...

heisst dann A erbt von B, C, und D ???

ODER hier wird nix vererbt? wenn "bus" spaeter intanziiert wird, werden auch Objekte sc_channel usw erzeugt, weil sie zB dafuer gebraucht werden?

thnx im voraus und mfg_ euer huck

(*)
falls dort stuende

C++:
class A : private B { ...

worauf bezieht sich "private" ? wenn zB B (die superklasse schon als protected oder private deklariert waere?)
--
There are 10 types, those who understand binary and those who don't...

Dieser Post wurde am 30.01.2006 um 11:14 Uhr von huckleberry editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.01.2006, 15:58 Uhr
virtual
Sexiest Bit alive
(Operator)


Mehrfachvererbung bedeutet, daß eine Klasse mehr als eine Baisklasse haben kann. Dh

C++:
class A: public B, public C, public D {
};


Bedeutet, daß A von B, C und D abgeleietet ist. Daher werden auch - wenn ein A objekt rzeugt wird, entsprechende B, C, und D Objekte erzeugt.

Man kann die Sichtbarkeit der Vererbung einschränken, dh wenn ich schreibe

C++:
class A: public B {
};


Sind für den benutzer von A auch die Methoden von B sichtbar, dagegen bewrikt

C++:
class A: private B {
};


daß A die Methoden von B benutzen kann, ein Benutzer von A jedoch nicht mehr. Im Zusammenhang mit Mehrfachvererbung kann man diese Sichtbarkeit Pro Basisklasse festlegen.

Desweiteren kann man natürlich auch solche Dinge konstruieren:

C++:
class Fahrzeug {
};

class Auto : public Fahrzeug {
};

class Schiff : public Fahrzeug {
};

class AmphibienFahrzeug : public Auto, public Schiff {
};


Bei dieser Vererbung hat ein AmphibienFahrzeug zwei FahrzeugInstanzen, weil es einmal die Fahrzeugeigenschaften von Auto, zum anderen von Schiff erbt. Je nach Klassendesign kann dies erwünscht oder unerwünscht sein. Stellt man sich etwa vor, daß in Fahrzeug sowas wie eine Seiennummer/Nummernschild usw. steht, so sind die ja für beide Instanzen eigentlich glich. Stellt man sich hingegen vor, daß dort Informationen über den Antrieb enthalten sind, so wären sie verm. verschieden (Schiff hat Schiffsmotor, Auto eben einen Automotor). Je nach dem was du willst, kannst Du erzwingen, daß sich Auto und Schiff in einem Amphibienfahrzeug eine Fahrzeug instanz teilen:

C++:
class Fahrzeug {
};

class Auto : virtual public Fahrzeug {
};

class Schiff : virtual public Fahrzeug {
};

class AmphibienFahrzeug : public Auto, public Schiff {
};


Das nennt man dann virtuelle Vererbung....

Fehlerträchtig ist Mehrfacherbung nicht zwingend; es es nur eben einfach so, daß die Vererbung in C++ nicht so trivial wie zB in Java ist.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.02.2006, 16:27 Uhr
huckleberry



zunaechst mal vielen dank fuer die ausfuehrliche antwort!

ah ja, da kommen wir der sache ja schon naeher.

aber nur noch um 100% abzusichern:

C++:
class bus : public sc_channel, public bus_write_if, public bus_read_if {
    public:
        bus( sc_module_name name ) : sc_channel(name),delay(5,SC_NS) {
            error_prob = 0.02; sc_trace(tracefile, value, "BUS");
        } // conrtuctor
    


diese zeile mit class bus : public sc_channel, public bus_write_if, public bus_read_if { ...:
!es findet dort eine mehrfachvererbung statt !!!
mehrfachvererbung heisst bus erbt von den anderen drei.

diese zeile kann keine andere bedeutung haben?!?
ich habe evtl gedacht, dass die classe bus heisst und immer wenn eine instanz dieser klasse bus erzeugt wird, werden auch auch sc_channel, bus_write_if und bus_read_if erzeugt, die aber sonst in keinem zusammenhang stehen (sprich erbt NICHT von den anderen drei). damit lag ich dann falsch!!!!

thnx.

p.s.: ich meine mal gelesen zu haben, dass mehrfachvererbung in java verboten ist.
--
There are 10 types, those who understand binary and those who don't...

Dieser Post wurde am 01.02.2006 um 16:28 Uhr von huckleberry editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.02.2006, 19:38 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von huckleberry:
ich meine mal gelesen zu haben, dass mehrfachvererbung in java verboten ist.


In Java gibt es keine Mehrfachvererbung .
In Java kann eine Klasse von genau einer Basisklasse erben aber beliebig viele Interfaces implementieren.

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: