我怎么能访问一个类的虚拟方法与她的地址/不使用方法的名称

How can i access a virtual method of a class with her adress/without using the name of the method

本文关键字:地址 使用方法 方法 虚拟 访问 一个 怎么能      更新时间:2023-10-16
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;}
};

这是我的代码,我正在尝试实践访问它只使用指针和地址,但我不能围绕函数指针的细节在这种情况下,我尝试了很多不同的选项,并得到了很多不同的错误。

附加说明:

让我们说我的类派生是在地址40000。在我看来,这个功能应该写在地址40001或类似的地方。c++是否提供了在地址40001上调用方法的能力,或者任何其他解决方案,我完全避免了方法的名称?

可以声明指向成员函数的函数指针。就像

   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;

如果你想用指针(带有名称)访问方法:

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

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