関数ポインタ
関数のポインタとオーバーロード
C言語では、関数のエントリポイントをポインタ変数に格納できました
もちろんC++でも可能ですが、オーバーロードされた関数はどうでしょう
C言語の関数の識別子は、必ず一つのエントリポイントしかありません
しかし、C++では関数のオーバーロードにより、一つの識別子が複数のアドレスを指します
C++では、関数のポインタを取得する時にポインタ変数の型で
オーバーロードされた関数のアドレスを取得します
ポインタの宣言と一致した関数のエントリポイントが代入されます
#include<iostream>
using namespace std;
void Kitty() {
cout << "Kitty on your lap\n";
}
void Kitty(char *str) {
cout << str << '\n';
}
int main() {
void (*po1)() , (*po2)(char *);
po1 = Kitty;
po2 = Kitty;
(*po1)();
(*po2)("Di Gi Gharat");
return 0;
}
ポインタに Kitty を代入する時、ポインタの型に合わせて代入される関数が決定します