Re: Multiple inheritance
junw2000@gmail.com wrote:
How about f(), does the object d also have two copies of f(), one is
A::f(), one is B::f()?
Member functions are not components of a class object. They are simply
functions that have special access with respect to the object, and, if
they are non-static, a special way of receiving the object as a
parameter.
No matter how many copies of a V object you have, and no matter how
many classes inherit V, there is only one V::f function.
The output of LINE2 is "B::f()", which means LINE0 is executed. B::f()
is private, why B::f() can be executed in main()?
What is called by in main() is V::f(), since you have a V * pointer and
are invoking a member function through it. V::f is what the name
lookup resolves to at compile time and that identifier is what is
subject to access control. It's a public identifier, so the call is
allowed.
Control ends up in B::f dynamically, because the object is really a B,
and V::f is a virtual function overriden by B::f. That overriding is
a dynamic, run-time behavior which is not subject to access controls
(and you would not want it to be; that would be silly).