Witam, mam kilka prostych spraw do tego fragmentu kodu:
void a(){
std::cout << "a\n";
}
void b(){
std::cout << "b\n";
}
void c(){
std::cout << "c\n";
}
int main(){
void(*pf[3])(void) = {a,b,c}; //tablica wskaźników na funkcje
void(*(*wsk)[3])(void) = &pf; //wskaźnik na adres tablicy wskaźników na funkcje
(*(*((*wsk)+0)))(); //takie nieco przesadzone wywołanie dla ćwiczeń ;) -> wywołana zostanie funkcja a()
}
Pytanie 1:
Mamy coś takiego:
void(*w)(void) = a;
w();
Czy to nie jest aby przypadkiem polimorfizm? Bynajmniej nie jest to programowanie OOP ani nie ma tu metod wirtualnych ale to na co wskazuje wskaźnik 'w' może się zmieniać w trakcie działania programu ( i może zależeć od decyzji użytkownika ). Często nie sposób więc określić podczas kompilacji jaka funkcja się tu wykona:
w();
Pytanie 2:
Napiszę sobie:
std::cout<<a<<" "<<b<<" "<<c<<"\n";
Dlaczego adresy funkcji a, b i c są takie same i wynoszą jeden !?
Pierwsze pytanie to takie upewnienie się czy dobrze to rozumiem, a drugiego aspektu kompletnie nie rozumiem :/
Dziękuje za pomoc