このクラスがあると仮定します:
class Shape
{
public:
int value;
Shape(int v) : value(v) {};
void draw()
{
cout << "Drawn the element with id: " << value << endl;
}
};
および次のコード(動作します)
Shape *myShapeObject = new Shape(22);
void (Shape::*drawpntr)();
drawpntr = &Shape::draw;
(myShapeObject ->*drawpntr)();
クラス Shape の void を返す引数 0 の関数メンバーへの drawpntr 関数ポインタがあります。
まずお聞きしたいのは:
drawpntr = &Shape::draw;
関数はメンバー関数で、ここにはオブジェクトがありません.. drawpntr はどのアドレスを受け取りますか? クラスは存在すらすべきではありません
ラインに同意します
(myShapeObject->*drawpntr)();
メンバー関数への関数ポインターを逆参照できないことを理解しているため(オブジェクトなし->関数なし)、drawpntrに実際に格納されているアドレスは何ですか?? オブジェクトがないとき
drawpntr = &Shape::draw;
行が呼び出されます..クラスはエンティティとしても存在してはなりません