469,923 Members | 1,543 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,923 developers. It's quick & easy.

Static nested class

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.
Jul 22 '05 #1
2 12498
"newbiecpp" <ne*******@yahoo.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
Jul 22 '05 #2
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" <v.********@comAcast.net> wrote in message
news:MhzTc.252867$a24.141615@attbi_s03...
"newbiecpp" <ne*******@yahoo.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

Jul 22 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Ryan Stewart | last post: by
4 posts views Thread by Vedanta Barooah | last post: by
7 posts views Thread by newbiecpp | last post: by
4 posts views Thread by UncleJoe | last post: by
4 posts views Thread by Mr Dyl | last post: by
1 post views Thread by nabil | last post: by
4 posts views Thread by =?Utf-8?B?YmlsbCB0aWU=?= | last post: by
3 posts views Thread by puzzlecracker | last post: by
reply views Thread by Waqarahmed | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.