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 

Static nested class

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
newbiecpp
Guest





PostPosted: Sat Aug 14, 2004 11:25 pm    Post subject: Static nested class Reply with quote



Java can declare a static nested class. Does C++ have same thing like?

class Outer {
public:
static class Inner {
...
};

....
};

I can compile this code. But my question is what's difference between Java
and C++ in term of static nested class? In which case, it is good design to
use static nested class?

Thanks in advance.


Back to top
Victor Bazarov
Guest





PostPosted: Sun Aug 15, 2004 1:48 am    Post subject: Re: Static nested class Reply with quote



"newbiecpp" <newbiecpp (AT) yahoo (DOT) com> wrote...
Quote:
Java can declare a static nested class. Does C++ have same thing like?

class Outer {
public:
static class Inner {
...
};

...
};

I can compile this code. But my question is what's difference between
Java
and C++ in term of static nested class? In which case, it is good design
to
use static nested class?

In Java, when you create a nested class, its instance is automatically
created and added to the object or to the class (if the nested class is
declared static), at least that's how I remember it. In C++ when you
declare a nested class, you only define a type, there is no instance
involved. In order to declare/define an instance, you need to explicitly
do that:

class Outer {
public:
class Inner {
...
};

Inner non_static_member;
static Inner static_member;
};

Hence, there is no need to declare the type 'static', you do that when
you declare the actual data member.

So, the answer could be "no, C++ can't do that, there are no static
types only static objects", or, if you prefer, "yes, C++ can do that,
you just have to declare a static data member of the type Inner in the
'Outer'". Pick whichever answer you like better.

Victor



Back to top
È«±æµ¿
Guest





PostPosted: Fri Oct 22, 2004 6:35 am    Post subject: Re: Static nested class Reply with quote



In java, the static inner class has different meaning..

Every java class members (include inner classes) must be accessed by object,
not class.

Only static members can be accessed by class.

so, if you want access inner class without creation of object, you must
declare as "static inner class".

for example ..

public class Outer {
public class Inner {
};
public static class StaticInner {
};
public static void main(String[] args) {
Outer.Inner x = new Outer.Inner <-- invalid
Outer.StaticInner x = new Outer.StaticInner <-- valid
}
};



"Victor Bazarov"
Quote:
"newbiecpp" <newbiecpp (AT) yahoo (DOT) com> wrote...
Java can declare a static nested class. Does C++ have same thing like?

class Outer {
public:
static class Inner {
...
};

...
};

I can compile this code. But my question is what's difference between
Java
and C++ in term of static nested class? In which case, it is good design
to
use static nested class?

In Java, when you create a nested class, its instance is automatically
created and added to the object or to the class (if the nested class is
declared static), at least that's how I remember it. In C++ when you
declare a nested class, you only define a type, there is no instance
involved. In order to declare/define an instance, you need to explicitly
do that:

class Outer {
public:
class Inner {
...
};

Inner non_static_member;
static Inner static_member;
};

Hence, there is no need to declare the type 'static', you do that when
you declare the actual data member.

So, the answer could be "no, C++ can't do that, there are no static
types only static objects", or, if you prefer, "yes, C++ can do that,
you just have to declare a static data member of the type Inner in the
'Outer'". Pick whichever answer you like better.

Victor





Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) 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.