2016-06-22 13 views
-1

Aというクラスがあり、メソッドがvoid foo()であるとします。 &A::fooを使ってfoo()へのポインタを得ることができますが、このポインタはインスタンス化されたオブジェクトではなく、クラスの型に依存しているようです。 Aという2つのオブジェクトa1a2がある場合、foo()メソッドがa1の場合とa2の場合の違いを、ポインタ、メンバー関数ポインタ、またはポインタアドレスを使用してどのようにすることができますか?基本的にはvoid foo()メソッドを参照するポインタをa1オブジェクト内で取得できるようにしたいと考えています。void foo()メソッドを参照するポインタと異なるのはa2です。ありがとうございました。メンバー関数の比較ポインタ

+1

クラスの2つのインスタンスが異なるメンバ関数を持つのはなぜですか? –

+2

あなたは関数+バインドを探しているかもしれないように聞こえるかもしれませんが、あなたの質問に詳細がなければ確実に言うのは難しいです。 –

+0

実際、そうではありません。どちらも同じメンバ関数 'void foo()'を持っているので、 'a1-> foo()'と 'a2-> foo()'を行うことができます。 – baboulinet

答えて

0

私はあなたがそれらを異なったものにすることはできないと思います。 a1-> foo()とa2-> foo()は基本的に同じです。

0

ここでは、オブジェクト(またはクラスのインスタンス)の概念について混乱していると思います。オブジェクトはクラスの青写真のようなものです。 オブジェクトごとにメンバー/メンバー関数を異ならせることはできません

たとえば、

class A 
{ 
    int result; 

    public: 
    void add(int x, int y) 
    { 
    this->result = x + y; 
    } 
} 

クラスAのすべてのオブジェクトには、メンバー変数resultおよびメンバー関数add()が含まれます。したがって、obj1->add()obj2->add()は、オブジェクト自体が互いに異なる属性を持っていても、同じadd()関数を呼び出します。

obj1->add(1,2)

obj2->add(1,3)はことがobj2->resultをもたらす一方、ことがobj1->resultをもたらすであろう。