Szerintem nézd meg jobban a kódot, semmiféle ősosztály nem játszik itt.
Adott két, egymástól független osztály, benne két függvény, amelyek nem statikusak (az, hogy virtuális-e vagy sem, az most itt lényegtelen).
Az egyik osztály meghívja a másik osztály metódusát, mintha statikus lenne (ld. :: operátor -> helyett), holott ez normális nyelvekben (C#, C++, stb.) le se fordulna.
Ráadásképp a hívott osztály a $this-t "megörökli" a hívó osztálytól, mintha a hívó osztály saját metódusa lenne, pedig semmiféle kapcsolatban nem áll a két osztály.
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////////
class A
{
public:
void Foo();
};
void A::Foo()
{
cout << "Hello";
}
//////////////////////////////////////////////////////////////////////////////
class B
{
public:
void Bar();
};
void B::Bar()
{
// error C2352: 'A::Foo' : illegal call of non-static member function
A::Foo();
}
//////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
B b;
b.Bar();
return 0;
}
----------------
Lvl86 Troll