2016-06-22 3 views
-1

Предположим, у нас есть класс A, который имеет способ void foo(). Я знаю, что могу получить указатель на foo(), используя &A::foo, но этот указатель, похоже, полагается только на тип класса, а не на экземпляр объекта. Если у нас есть два объекта a1 и a2 типа A, как мы можем сделать разницу между foo() методом a1 и номером a2 с использованием указателей, указателей функций-членов или даже адресов указателей? В принципе, я хочу получить указатель, который ссылается на метод void foo() внутри объекта a1, который будет отличаться от указателя, который ссылается на метод внутри a2. Спасибо.Сравнить функции функции указатели функций

+1

Почему два экземпляра класса имеют разные функции-члены? –

+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; 
    } 
} 

Все объекты класса А будут иметь переменную-член и результат функции add() члена в нем. Таким образом, obj1->add() и obj2->add() вызовет ту же функцию add(), даже если сами объекты будут иметь разные атрибуты друг от друга.

obj1->add(1,2) привело бы к obj1->result быть , тогда как

obj2->add(1,3) привело бы к obj2->result быть .

Смежные вопросы