カレンダー
| 10 | 2025/11 | 12 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
最新記事
(01/30)
(01/18)
(12/16)
(12/12)
(11/25)
(11/25)
(11/24)
(11/24)
(11/22)
(11/17)
最新コメント
[12/25 日没]
[11/15 無色大師]
[11/12 無色大師]
[11/11 無色大師]
[11/08 無色大師]
リンク
新刊カレンダー
ブログ内検索
プロフィール
HN:
Nina.A
性別:
男性
趣味:
麻雀、ラノベ、漫画
自己紹介:
MJ4や天鳳等でよく麻雀やってます。もし会ったらよろしくです。
ブログは単なるメモ帳となる予定。
ブログは単なるメモ帳となる予定。
カウンタ
C/C++勉強中の大学生雑記
2025/11/02
06:09:55
2008/11/10
00:43:29
前のエントリで関数ポインタを少し理解したので、続いてメンバ関数ポインタについて少し学ぶ。
今回もとりあえず例を挙げておく。
class vec{
public:
void resize(int);
};
int main(void){
vec v;
vec *w = new vec();
void (vec::*func)() = &vec::resize;
(v.*func)(5);
(w->*func)(5);
return 0;
}
メンバ関数ポインタの宣言は、
void ( vec ::* func )( ); 【返却値】(【クラス名】::*【変数名】)(【引数】);
メンバ関数のアドレス取得は、
& vec :: resize &【クラス名】::【関数名】で可能。メンバ関数のアドレス取得は&が必須なので、関数アドレス取得時には常につける癖をつけた方がよさそう。各変数固有のアドレス(上の例ではvec::vのresize関数)を取得するわけではないみたい。
ポインタを介した関数の実行は、
vec v; (v.*func)(5); vec* w = new vec; (w->*func)(5);の様に、.*演算子か->演算子を用いる。
ちなみに、メンバ関数が静的(static)である場合には、呼び出しは普通の関数の様に呼び出せる。
PR
この記事にコメントする
