Rzutowanie funkcji składowych klasy dziedziczonej na funkcje klasy przodka

0

Witam, może nie będę zbytnio tłumaczył o co chodzi, tylko po prostu wkleję kod który chciałbym żeby działał:

class cos
{
public:
	cos() { asd = NULL; }
	typedef void (*funkcja)();
	void wykonajfunkcje() { if (asd) asd(); else printf(":("); }

	funkcja asd;
};

class costam: public cos
{
public:
	costam() { cos::asd = asd; }
	void asd() { printf("bum"); }
};

class cospieknego: public cos
{
public:
	cospieknego() { cos::asd = kwiatek; }
	void kwiatek() { printf("kwiatek"); }
};

class cosbezczegos: public cos
{
public:
	//... brak przypisania funkcji
};

i na taki kod kompilator się obraża, oczywiście próbowałem też definiowac typ funkcja jako:
typedef void (cos::*funkcja)(); ale również coś mu nie pasi, chodzi mi o coś w stylu typu funkcyjnego wirtualnego...

1
class cos
{
public:
	cos() { asd = NULL; }

	typedef void (cos::*funkcja)();

	void wykonajfunkcje() { if (asd) (this->*asd)(); else printf(":("); }

	funkcja asd;
};

class costam: public cos
{
public:
	costam() { cos::asd = (cos::funkcja) &costam::asd; }
	void asd() { printf("bum"); }
};
0

jeszcze jedno pytanie, jak takiego delegata wywołać spoza klasy:
cos* aaa = new cos;
(aaa->*asd)();
delete cos;

dostaje blad: invalid use of member blablabla

1
(aaa->*(aaa->asd))();
0

dzięki.. a jak to w zasadzie działa? bo chyba nie za bardzo rozumiem tego zapisu... ale działa :P

1

Pierwsze aaa to obiekt, na rzecz którego chcesz wywołać metodę, drugie - to obiekt z którego pobierasz adres metody.

1 użytkowników online, w tym zalogowanych: 0, gości: 1