Re: Can nested class members access private members of nesting class?
From: Matej Pivoluska (spam_at_spam.com)
Date: 12/13/03
- Next message: Unforgiven: "Re: for loop?"
- Previous message: Unforgiven: "Re: You know the default error beep in windows? How exactly do you do that?"
- In reply to: CoolPint: "Can nested class members access private members of nesting class?"
- Next in thread: Jeff: "Re: Can nested class members access private members of nesting class?"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sat, 13 Dec 2003 13:32:20 +0100
CoolPint wrote:
> I read in books that nested class cannot access private members of
> nesting class and vice versa unless they are made friends. Somehow, my
> compiler is letting my nested class member functions access private
> members of nesting class.
OK, we are saying about class *Container* with some private members.
> template <typename T>
> class Container {
> // NO friendship given to any other
> public:
> class ContainerIterator;
> // other members
> private:
> class Node;
> Node * header;
> Node * tailer;
> int counter;
> };
>
> Nested class Node has all of its members as public so that Container
> members can access them. And then I have the nested Class
> ContainerIterator, which have both public and private parts.
OK, now we are saying about nested class ContainerIterator nested to class
*Container*.
> template <typename T>
> class Container<T>::ContainerIterator {
>
> friend class List<T>; // so that List<T> can access private members of
> Iterator
> public:
> // public members
> private:
> List<T>::Node * dummyheader;
> List<T>::Node * ptr;
> ContainerIterator(const List<T> & l , List<T>::LNode * p);
> // private members
> };
>
> I forget to declare ContainerIterator class to be a friend of
> Container class, yet member functions of ContainerIterator can access
> private members of Container class! For example,
> ContainerIterator(const List<T> & l , List<T>::LNode * p)
> {
> dummyheader = l.header; // ! This works! but why?
> ptr = p;
> };
You access members of List class, not Container class!
I'm satisfied that if you write other constructor...
ContainerIterator(const Container<T> & l , Container<T>::LNode * p)
{
//!!! dummyheader = l.header; // ! This won't work
ptr = p;
};
...the compiler will report error.
-- mP http://pivoluska.matfyz.cz/
- Next message: Unforgiven: "Re: for loop?"
- Previous message: Unforgiven: "Re: You know the default error beep in windows? How exactly do you do that?"
- In reply to: CoolPint: "Can nested class members access private members of nesting class?"
- Next in thread: Jeff: "Re: Can nested class members access private members of nesting class?"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|