( saxus | 2010. 01. 14., cs – 19:53 )

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