2016-06-28 3 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 по запросу:

Допустим, мой класс Derived на адрес 40000. С моим, все еще новое, понимание функции должны быть написаны на адрес 40001 или аналогичный. Предоставляет ли C++ возможность просто вызвать метод по адресу 40001 или любое другое решение, где я полностью избегаю имени метода.

+0

Какой метод вы хотите назвать? –

+0

Я хотел бы напечатать как «5», так и «15». – Branko

+0

"функция должна быть записана по адресу 40001 или аналогичной" Нет, это абсолютно не так. –

ответ

1

Вы можете объявить указатель на функцию functions.Something член как

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

Если вы хотите получить доступ к методу с указателем (с названием):

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

, но, насколько мне известно, нет доступа к функции с адресом памяти.