如何使用她的地址访问班级的虚拟方法/不使用方法的名称

时间:2016-06-28 04:53:38

标签: c++ function-pointers virtual-method

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

这是我的代码,我尝试练习只使用指针和地址来访问它但是在这种情况下我无法绕过函数指针的细节,我尝试了很多不同的选择,并得到了很多不同的错误。

根据要求进行额外的表达:

让我们说我的Derived类在地址40000上。有了我的,仍然是新的,理解该函数应写在地址40001或类似的地方。 c ++是否能够只调用地址40001上的方法,或者我完全避开方法名称的任何其他解决方案。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

如果要使用指针(带名称)访问该方法:

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

但是,据我所知,没有办法只使用内存地址访问一个函数。