Wednesday, March 16, 2011

Can you have protected nested classes in C++?

I have a class that only really ever needed by classes in a certain class hierarchy. I wanted to know if it is possible to nest the class in the highest class's protected section and have all the other classes automatically inherit it?

From stackoverflow
  • "Inherit" is the wrong word to use since it has a very specific definition in C++ which you don't mean, but yes you can do that. This is legal:

     class A {
       protected:
       class Nested { };
     };
    
     class B : public A {
       private:
       Nested n;
     };
    

    And code that is not in A or something that derives from A cannot access or instantiate A::Nested.

    Kieveli : Hmm What happens if class B provides an accessor method for Nested n? Probably a compile error?
    MSalters : Actually, no. When declaring methods of B, name lookup also happens in the scope of class B. And in B scope, A::Nested is accessible. Hence, A::Nested& B::Get_n() is OK.
    Tyler McHenry : Hm, you're correct. A::Nested is accessible since B can return an A::Nested from a public function. B it's still not instantiable, so interestingly this leads to the situation where the caller is not allowed to store the return value of B::Get_n().

0 comments:

Post a Comment