クラスメンバーポインタおよびメンバー関数ポインタ
990 ワード
クラス内の要素を指すポインタを指定する場合は、どうすればいいでしょうか.
クラスを定義したとします.2つの変数と2つの関数が含まれています.
関数と要素を指すポインタを定義するとします.このように定義できます.
呼び出し方法は.*呼び出すことで対応する変数を呼び出すことができます
関数ポインタを定義すると、このフォーマットで定義できます.
戻り値(クラス名:*ポインタ名)(パラメータ)const
ここで、v.*p()と書くと、優先度の問題でカッコが無視されるため、カッコを付ける必要があります.
呼び出し方法は次のとおりです.
クラスを定義したとします.2つの変数と2つの関数が含まれています.
struct Vector
{
public:
int x;
int y;
public:
Vector(int tX, int tY) :x{ tX }, y{ tY } {}
int getX() const {
return x;
}
int getY() const {
return y;
}
関数と要素を指すポインタを定義するとします.このように定義できます.
int Vector::*px = &Vector::x; //
int Vector::*py = &Vector::y;
呼び出し方法は.*呼び出すことで対応する変数を呼び出すことができます
Vector v{ 1,2 };
cout << v.*px << endl;
cout << v.*py << endl;
関数ポインタを定義すると、このフォーマットで定義できます.
戻り値(クラス名:*ポインタ名)(パラメータ)const
int ReadFucPointer(Vector v, int (Vector::*p)() const) {
return (v.*p)(); // ,
}
ここで、v.*p()と書くと、優先度の問題でカッコが無視されるため、カッコを付ける必要があります.
呼び出し方法は次のとおりです.
cout << ReadFucPointer(v, &Vector::getX) << endl;
cout << ReadFucPointer(v, &Vector::getY) << endl;