C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Sichtbarkeit typedef

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andreas Volz
Guest





PostPosted: Tue Oct 25, 2005 11:46 am    Post subject: Sichtbarkeit typedef Reply with quote



Hi,

gerade bei geschachtelten Templates (z.B. vector in map) und langen
Klassennamen wird es mit der Zeit recht unübersichtlich. Um das etwas zu
erleichtern kann man ja typedef nutzen um das etwas zu vereinfachen.
Jetzt ist nur die Frage an welcher Stelle ich das typedef platziere.
Bisher hab ich es immer in den Header über die Klasse eingefügt. Manche
typedefs sind allerdings nur zur Verwendung für die Klasse selbst
gedacht. Ich hab mittlerweile rausgefunden, dass diese Stellen vom
Compiler akzeptiert werden:

typedef int myint1;

class foo
{
typedef int myint2;

private:
typedef int myint3;

public:
typedef int myint4;
}

Ich verstehe die Sichtbarkeit dieser verschiedenen typedef nicht ganz.
Kann das mal jemand kurz erklären? Oder gibt es nur eine globale
Sichtbarkeit für typedef und es spielt keine Rolle wo ich es einfüge?

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Jörg Barfurth
Guest





PostPosted: Tue Oct 25, 2005 3:59 pm    Post subject: Re: Sichtbarkeit typedef Reply with quote



Andreas Volz schrieb:

Quote:
gerade bei geschachtelten Templates (z.B. vector in map) und langen
Klassennamen wird es mit der Zeit recht unübersichtlich. Um das etwaszu
erleichtern kann man ja typedef nutzen um das etwas zu vereinfachen.
Jetzt ist nur die Frage an welcher Stelle ich das typedef platziere.
Bisher hab ich es immer in den Header über die Klasse eingefügt. Manche
typedefs sind allerdings nur zur Verwendung für die Klasse selbst
gedacht. Ich hab mittlerweile rausgefunden, dass diese Stellen vom
Compiler akzeptiert werden:


typedef-Deklarationen deklarieren auch (nur) einen Namen. Sie dürfen
fast überall dahin, wo du auch einen Objektnamen deklarieren darfst.

Auch die Regel für die Sichtbarkeit und Zugreifbarkeit sind dieselben
wie für andere Namen.

Quote:
typedef int myint1;


Im globalen Scope, und im Rest dieser Übersetzungseinheit dort sicht-
und zugreifbar.

Quote:
class foo
{
typedef int myint2;

private:

Das braucht es hier nicht wirklich. Bei 'class' ist der Defaultzugriff
'private' (bei 'struct' wäre es 'public'. Also haben myint2 und myint3
denselben Status.

Quote:
typedef int myint3;


Sichtbar in der Klassenscope von class foo; zugreifbar für Member und
friends von class foo.

Quote:
public:
typedef int myint4;

Sichtbar in der Klassenscope von class foo; öffentlich zugreifbar.


Quote:
}

Ich verstehe die Sichtbarkeit dieser verschiedenen typedef nicht ganz.
Kann das mal jemand kurz erklären? Oder gibt es nur eine globale
Sichtbarkeit für typedef und es spielt keine Rolle wo ich es einfüge?


void bar()
{
myint1 a; // OK
::myint1 b; // auch OK
myint2 c; // Fehler. 'myint2' nicht bekannt
foo::myint2 d; // Fehler. 'myint2' ist private in class foo
foo::myint3 e; // Fehler. 'myint3' ist private in class foo
foo::myint4 f; // OK
}

Die Deklarationen von d und e wären OK, wenn bar() ein friend von class
foo wäre.

Die Deklarationen von c, d und e wären OK, wenn bar() ein Member von
class foo wäre.

HTH, Jörg

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andreas Volz
Guest





PostPosted: Tue Oct 25, 2005 4:22 pm    Post subject: Re: Sichtbarkeit typedef Reply with quote



Am Tue, 25 Oct 2005 17:59:42 +0200 schrieb Jörg Barfurth:

Quote:
Andreas Volz schrieb:

gerade bei geschachtelten Templates (z.B. vector in map) und langen
Klassennamen wird es mit der Zeit recht unübersichtlich. Um das
etwas zu erleichtern kann man ja typedef nutzen um das etwas zu
vereinfachen. Jetzt ist nur die Frage an welcher Stelle ich das
typedef platziere. Bisher hab ich es immer in den Header über die
Klasse eingefügt. Manche typedefs sind allerdings nur zur
Verwendung für die Klasse selbst gedacht. Ich hab mittlerweile
rausgefunden, dass diese Stellen vom Compiler akzeptiert werden:


typedef-Deklarationen deklarieren auch (nur) einen Namen. Sie dürfen
fast überall dahin, wo du auch einen Objektnamen deklarieren darfst.

Auch die Regel für die Sichtbarkeit und Zugreifbarkeit sind dieselben
wie für andere Namen.
[...]

Ok, danke für die ausführliche Erklärung. Ich hab mich nämlich
gewundert, weil meine IDE beim Verschieben in den class-Bereich das
Syntax-Highlighting dieses neuen Datentyps abgeschaltet hat. Darum
dachte ich das wäre vielleicht nur eine g++ Erweiterung. Da liegt wohl
ein Problem beim Syntax-Highlighting vor.

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.