2016-06-22 3 views
-1

A 클래스에는 void foo() 메서드가 있습니다. 나는 &A::foo을 사용하여 foo()에 대한 포인터를 얻을 수 있지만,이 포인터는 인스턴스화 된 객체가 아니라 클래스 유형에 의존하는 것으로 보입니다. 두 개의 객체 a1a2A 인 경우 메서드가 이고 포인터가 a2이고 포인터, 멤버 함수 포인터 또는 포인터 주소를 사용하면 어떻게 차이가 있습니까? 기본적으로 void foo() 메서드를 참조하는 포인터를 a1 개체 내에서 가져올 수 있기를 원합니다. void foo() 메서드를 참조하는 포인터와 다른 개체는 a2 안에 있습니다. 고맙습니다.멤버 함수 포인터 비교

+1

두 개의 클래스 인스턴스가 다른 멤버 함수를 갖는 이유는 무엇입니까? –

+2

함수 + 바인드를 찾는 것처럼 들리 겠지만 질문에 더 자세한 내용이 없으면 확실하게 말하기는 어렵습니다. –

+0

사실 그들은 그렇지 않습니다. 둘 다'a1-> foo()'와'a2-> foo()'를 할 수 있도록 같은 멤버 함수'void foo()'를 가지고 있습니다. – baboulinet

답변

0

나는 당신이 그들을 다르게 만들 수 있다고 생각하지 않는다. a1-> foo()와 a2-> foo()는 기본적으로 같습니다.

0

저는 여러분이 여기에서 객체 (또는 클래스의 인스턴스)에 대한 개념을 혼동하고 있다고 생각합니다. 객체는 클래스의 청사진과 같습니다. 각 개체마다 다른 멤버/멤버 함수를 사용할 수 없습니다..

예 :

class A 
{ 
    int result; 

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

클래스 A의 모든 개체에는 멤버 변수 결과 및 멤버 함수 add()이 포함됩니다. 그래서 obj1->add()obj2->add()은 객체 자체가 서로 다른 속성을 갖더라도 동일한 add() 함수를 호출합니다.

obj1->add(1,2)4 것으로 obj2->result 초래 3,

obj2->add(1,3)

반면 것으로 obj1->result 될 것이다.