Re: Is it standard that inner class inherits the outer class' friendship?
On Apr 30, 1:06 pm, Qi <n...@no.com> wrote:
Below code, indeed I found here,http://bytes.com/topic/c/answers/523273-i=
nner-classes-friend
I changed it a bit to make it compilable and simpler.
The code can be compiled on both VC 2008 Express and GCC 4.5.2
That implies that
"An inner class can inherit its outer class' friendship".
My question is if that implication correct?
I doubt that because,
1, The link I showed above seems approved that's wrong.
Though that was posted in 2006.
2, As far as I understand, a derived class doesn't inherit
its base class' friendship. B is F's friend, D is derived from
B, D is not F's friend by default. (am I correct?)
Can any one give some summary on the friendship inheritance
of inner and outer classes, base and derived classes that defined
by the standard?
Thanks
===CODE===
class Node {
private:
int value;
friend class Graph;
};
class Graph {
private:
class cmp {
public:
int operator()(const Node &l, const Node &r) {
return (l.value - r.value); // without that fr=
iend, this
line can't compile
}
};
};
--
WQ
Hello
1. At first, I have to say the terms "inner class" and "outer class"
aren't standard. It's somehow Java terms. C++ uses "nested class".
2. About your code, By the term "inner class", if you mean "nested
class",
you didn't use it. You have two classes: Node and Graph and you
declared
Graph as a friend of Node. May be, by inner you mean the logical
inner,
because each node of a graph is somehow the inner part of whole graph.
3. Yes. You are right. friendship isn't inherited, transitive, or
reciprocal.
Please see the following link:
http://www.parashift.com/c++-faq-lite/friends.html#faq-14.4
Also for standard wording, see section 11.3 of
N3290- Final Draft of International Standard.
HTH,
-- Saeed Amrollahi