Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » virtual und protected

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
12.12.2004, 16:05 Uhr
Lensflare



hallo

hab schon ein haufen text über virtual und protected gelesen, aber hab immer noch nicht verstanden, was diese machen.

zunächst mal virtual:
hat das unbedigt nur dann verwendung, wenn eine klasse vererbt wird? Was genau macht virtual? "bindet die methoden zur laufzeit" versteh ich nicht. Hat es auch was mit zeigern zu tun?

dann protected:
private und public versteh ich ja, aber wozu ist protected da?

Danke schon mal für die Hilfe.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.12.2004, 16:10 Uhr
Pablo
Supertux
(Operator)


Schon lange her, dass ich mich mit C++ beschäftigt hatte, aber mal sehen , ob ich jetzt was richtiges sage.

Wenn du in einer Klasse etwas private hast, dann kannst du darauf zugreifen, aber nur innerhalb der Klasse. Wenn du von dieser Klasse (sagen wir mal A) eine Klasse B ableitest, dann bleiben die private-Objekte von A für B verborgen, d.h. B kann darauf nicht zugreifen. Wenn du aber protected benutzt, dann bleiben diese Elemente zwar für alle andere privat aber für die abgeleitete Klassen nicht, d.h. B kann dann auf diese Elemente zugreifen.

PS: ich hoffe, ist nicht falsch, was ich da erzähle.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.12.2004, 16:12 Uhr
derphilipder



virtual:
Wenn Du eine abgeleitete Klasse über einen Pointer auf die Basisisklasse ansprichst und in der abgeleiteten Klasse eine Methode der Basisklasse neudefiniert ist, wird über den Basisklassenpointer nur die Methode der Basisklasse aufgerufen.
Wenn diese virtual definiert ist, wird die passende Methode der abgeleiteten Klasse aufgerufen. Da vorher nicht bekannt ist, worauf dieser Pointer einmal zeigen wird, wird die aufzurufende Methode zur Laufzeit bestimmt.

protected:
Die Methoden einer abgeleiteten Klasse können nicht auf private-Elemente der Basisklasse zugreifen, auf protected-Elemente wohl.


Mist, zu spät!
Das mit dem protected gilt auch für friend- Funktionen und Klassen
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"

Dieser Post wurde am 12.12.2004 um 16:14 Uhr von derphilipder editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.12.2004, 16:18 Uhr
Lensflare



also protected hab ich nun kapiert...

aber was heisst:

Zitat:

Wenn Du eine abgeleitete Klasse über einen Pointer auf die Basisisklasse ansprichst


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.12.2004, 16:29 Uhr
derphilipder




C++:
class A
{...}

class B:public A
{...}

B bobjekt;
A* ptr=&B;



--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.12.2004, 16:48 Uhr
Spacelord
Hoffnungsloser Fall


Schau dir mal das kleine Beispiel an und dann entfern die virtuals und beobachte was dann ausgegeben wird.

C++:
#include <iostream>

class A
{
public:
    virtual ~A(){std::cout<<"Dtor aus A \n";};
    virtual void foo(){std::cout<<"Ich bin ein A\n";}
};

class B:public A
{
public:
    virtual ~B(){std::cout<<"Dtor aus B \n";};
    virtual void foo(){std::cout<<"Ich bin ein B\n";}
};

class C:public A
{
public:
    virtual ~C(){std::cout<<"Dtor aus C \n";};
    virtual void foo(){std::cout<<"Obwohl ein C kann ich foo aus meiner Basisklasse nutzen-> ";A::foo();}
};

int main()
{
    A* basis[3];
    basis[0] = new A();
    basis[1] = new B();
    basis[2] = new C();


    for(int i=0;i<3;i++)
    {
        basis[i]->foo();
        delete basis[i];
    }

    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
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: