Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Question about C++ inner class

Tags:

c++

HI,

In C++ inner class,

class A {
    public: 
         void f1();
    private:
         void f2();
    class B {
       private void f3(); 
    };

 }

Does an inner class (B) has a pointer to its parent class (A)? (like it does in Java). And can B calls its parent class public/private method (like it does in Java).

Thank you.

like image 258
michael Avatar asked Apr 22 '10 00:04

michael


People also ask

What is a reason to use an inner class?

We use inner classes to logically group classes and interfaces in one place to be more readable and maintainable. Additionally, it can access all the members of the outer class, including private data members and methods.

What are two advantages to using inner classes?

Advantages. The main advantages of a nested (inner) class are: It shows a special type of relationship, in other words, it has the ability to access all the data members (data members and methods) of the main class including private. They provide easier code because it logically groups classes in only one place.

Can inner class be protected?

You can just think protected inner class is protected member, so it only access for class, package, subclass but not for the world. In addition, for outter class, there is only two access modifier for it. Just public and package.

Can inner class extend?

Inner class can extend it's outer class. But, it does not serve any meaning. Because, even the private members of outer class are available inside the inner class. Even though, When an inner class extends its outer class, only fields and methods are inherited but not inner class itself.


1 Answers

No -- in C++, nesting classes only affects names and visibility, not the semantics of the class itself. As far as generated code goes, the nested class is no different from one that isn't nested.

All that's changed is the visibility and the name (e.g. if it's in a private: section of the outer class, it's not visible to the outside world, and if it's in a public: section, it's visible, but (of course) to name it you use outer_class::inner_class. It's still a completely separate class though -- just for example, you can create an instance of the inner class without creating any instance of the outer class.

Edit: Sorry, I missed part of your question. In C++ 0x, the inner class does have access to the the private parts of the outer class -- in essence, it's as if the outer class has declared the inner class as its friend, so private names are visible, but you still need to pass it something like a reference to an object of the outer class before it can invoke any non-static member functions of the outer class.

Although this isn't supposed to be the case yet, I believe most compilers implement this particular part already.

like image 124
Jerry Coffin Avatar answered Sep 21 '22 09:09

Jerry Coffin