2016-06-28 6 views
0
class Base{ 
public: 
    virtual int first()=0; 
    virtual int second()=0; 
}; 

class Derived: public Base{ 
public: 
    virtual int first(){return 5;} 
    virtual int second(){return 15;} 
}; 

이것은 내 코드이며, 포인터와 주소만을 사용하여 액세스하는 연습을 시도하지만 이 경우 함수 포인터의 세부 사항에 대해 머리를 감싸지는 않겠지 만, 여러 가지 옵션을 시도하고 많은 다른 오류가 발생했습니다. 요청에 따라나는 방법의 이름을 사용하지 않고/그녀의 주소가있는 클래스의 가상 메소드에 접근 할 수있다.

추가 explenation :

는 파생 내 수업 내, 여전히 새로운 기능을 이해하는 것은 주소 40001 또는 이와 유사한에 작성해야으로 주소 40000에 말할 수 있습니다. C++은 40001 번지에 메서드를 호출 할 수있는 능력을 제공합니까, 아니면 메서드의 이름을 완전히 피하는 다른 솔루션을 호출 할 수 있습니까? 당신이 (이름으로) 포인터와 방법에 액세스하려면

+0

전화 할 방법은 무엇입니까? –

+0

"5"와 "15"를 모두 인쇄하고 싶습니다. – Branko

+0

"함수는 40001 번지 또는 그와 비슷한 주소에 쓰여 져야합니다."아니요, 절대 그렇지 않습니다. –

답변

1

당신은

int (Derived::*firstptr)(); 
    firstptr = &Derived::first; 
    int (Derived::*secondptr)(); 
    secondptr = &Derived::second; 

다음

Derived obj; 
    std::cout << (obj.*firstptr)()<<std::endl; 
    std::cout<<(obj.*secondptr)()<<std::endl; 
+0

나는 그것에 익숙하지만 다른 방법을 찾고 싶었다. 내 수업 Derived는 40000 주소에 있습니다. 내, 아직 새로운 기능을 이해해야 주소 40001 또는 이와 유사한에 작성해야합니다. C++은 40001 번지에 메서드를 호출 할 수있는 능력을 제공합니까, 아니면 메서드의 이름을 완전히 피하는 다른 솔루션을 호출 할 수 있습니까? – Branko

+0

다른 방법으로 생각해보십시오. –

+0

여기, 편집했습니다. – Branko

0

같은 멤버 functions.Something에 함수 포인터를 선언 할 수

Derived d = new Derived(); 
Derived* pDerived = &d; 
cout << pDerived->first(); 
cout << pDerived->second(); 

내 지식으로는 메모리 주소가있는 함수에 액세스 할 수있는 방법이 없습니다.