Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zugriff auf private:

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 < [ 2 ]
000
23.10.2003, 02:15 Uhr
~CppAnfänger
Gast


Hallo!

Ich fang gerade an mit denn Klassen. Ich hab folgendes Problem.

Ich habe eine Klasse


C++:
class CKlasse1
{
public:
CKlasse1();
~CKasse1();

int Funktion1();
....
private:
void Funktion2();
...

};

int CKlasse1:: Funktion1()
{
    ...
    //Berechen rval
    ...
    Funktion2();
return rval;
}




Das ist auch alles sehr schön und ich benutze das Objekt mehrmals in meinem Projekt.

Jetzt schreibe ich eine zweite Klasse die eine Instanz des ersten Objekts beinhaltet.

Das geht zwar auch, aber mein Prog würde bedeutend schneller und kürzer wenn ich den Ablauf der Klasse 1 ändern könnte.

Ich brauche den return Wert von CKlasse1:: Funktion1(). Berechne damit was und erst dann darf die CKlasse1:: Funktion2() Aufgerufen werden.

Ich habe jetzt versucht:


C++:
class CKlasse2 : CKlasse1
{
public:
CKlasse2();
~CKasse2();

int Funktion1();
....
// private:
void Funktion2();
...

};

int CKlasse2:: Funktion1()
{
    ...
    //Berechen rval
    ...
    //Funktion2();
return rval;
}

void CKlasse2:: Funktion2()
{
CKlasse1:: Funktion2()
}



Jetzt kann meine neue Klasse erst auf Funktion1() und dann auf Funktion2() zugreifen.

Mein Problem ist nun folgendes:
Ich dacht ich könnte nun Automatisch über die Klasse 2 public: Funktionen der Klasse 1 Aufrufen.

Da meckert aber mein (MS c++ v6.0) Compiler

CKlasse2 m_Klasse2.Funktion3(); // Klasse1 public: void Funktion3();

error C2248: 'Funktion3' : cannot access public member declared in class 'CKlass1'

was mache ich falsch und gibt es andere möglichkeiten das man auf private: einer Klasse zugreift?

---- edit by ao: Es ist klasse, dass du von dir aus Code-Tags verwendest. Das Tag heißt aber nicht c++, sondern cpp, und am Ende des Code-Bereichs kommt ein / davor: /cpp.

Dieser Post wurde am 23.10.2003 um 08:43 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.10.2003, 07:05 Uhr
(un)wissender
Niveauwart


Ich weiß nicht, ob ich dich richtig verstanden habe, aber ich glaube, du wolltest von einer abgeleiteten Klasse auf eine private-Funktion der Basisklasse zugereifen.
Deklariere diese Funktion nicht als private, sondern als protected, die ist dann für die abgeleitete Klasse public und nur für sie.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.10.2003, 13:03 Uhr
Pablo
Supertux
(Operator)


Ich glaube, dass wenn man etwas als friend deklariert, kann auch von den abgeleiteten benutzt werden, wenn etwas als private deklariert ist, oder?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.10.2003, 16:22 Uhr
typecast
aka loddab
(Operator)


Soweit ich weiß kann eine Klasse, die unter dem friend-Eintrag einer anderen Klasse steht nur auf public und protected Mehtoden/Variablen zugreifen. Private heißt, dass nur diese und keine andere Klasse darauf zugreifen kann.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.10.2003, 20:24 Uhr
(un)wissender
Niveauwart


friend ist explizit für private-Zugriffe da, ansonsten bräuchte man friend ja auch kaum (nur für protected?).
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.10.2003, 23:54 Uhr
~CppAnfänger
Gast


Erst mal Danke!

Aber ich dachte wenn ich vollgendes mache:


C++:
class CKlasse2 : CKlasse1
{
};


Das die Klassen dann Identisch sind.
Also das ich auf Funktionen die in Klasse 1 als public Deklariert sind. Für eine Instanz der Klasse 2 aufrufen kann ohne sie erneut zu Deklarieren oder gar zu Implementieren.
Und genau das geht bei mir zu Zeit nicht.

Übrigens das mit dem private: in protected: ändern das hatte ich auch gemacht ohne es zu erwähnen. Sorry.
Aber das Funtz auch.

MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.10.2003, 00:01 Uhr
Pablo
Supertux
(Operator)


Nein, die Klassen sind nicht identisch. Die Klasse CKlasse2 vererbt die Struktur und Funktionalität der Klasse CKlasse1. Du hast auch von deinen Eltern die Funktionalität und Struktur deiner Eltern vererbt, du lebst, du atmest, du hast einen Kopf, 2 Augen, usw... genau so wie deine Eltern und wie deine Großeltern. Aber ihr seid nicht identisch. Mit den Klassen ist es fast genau so.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.10.2003, 00:04 Uhr
~CppAnfänger
Gast


Aber was Vererben die denn dann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.10.2003, 00:08 Uhr
Pablo
Supertux
(Operator)


Die Struktur der Klasse, also, die Variablen, Funktionen usw. die als public deklariert worden sind.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.10.2003, 00:12 Uhr
~CppAnfänger
Gast


Ja Also wenn ich das habe:


C++:
class Klasse1
{
public:
void Funktion1();
};
...

Klasse1 Instanz;

Instanz.Funktion1();



nun volgendes

C++:
class Klasse2 : Klasse1
{
};

...


Klasse2 Instanz;

Instanz.Funktion1();



Und das geht bei mir nicht?

MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: