C++想要从基类调用派生函数

Vij*_*jay 0 c++ virtual

我有以下情况

class base
{
public:

   virtual void Accepted(SOCKET s)  //// Event
   {

   }
   void Listner()
   {
          SOCKET acpted;
          Accepted(acpted); /// When I call I want derived class's Accepted() to get called

   }

};


class derived
{
   virtual void Accepted(SOCKET s)  //// Event
   {
         ////// HERE i will write actual implementation (QUESTION)
   }

}
Run Code Online (Sandbox Code Playgroud)

我想调用派生类的函数.这将像这里的事件一样工作.我想通知派生类在基类中发生的事情.

Eri*_*rik 6

class derived : public basederived实际上继承base.然后您的虚函数调用将按预期工作.

请注意,您无法在构造函数或析构函数中进行此类虚函数调用base- 在base调用构造函数时,该derived部件尚不存在.在base调用析构函数时,该derived部件已被破坏.

编辑:演示,回应评论.

class base
{
public:
    virtual void Accepted(SOCKET s)  //// Event
    {
        cout << "base::Accepted" << endl;
    }
    void Listner()
    {
        SOCKET acpted = 0;
        Accepted(acpted); /// When I call I want derived class's Accepted() to get called
    }
};


class derived : public base
{
    virtual void Accepted(SOCKET s)  //// Event
    {
        cout << "derived::Accepted" << endl;
    }
};


int main(int argc, char * argv[])
{
  derived d;
    d.Listner();
}
Run Code Online (Sandbox Code Playgroud)

这将打印 derived::Accepted

  • @Vijay:Erik 提供的这个解决方案应该可以工作,只要 `Accepted` 在基类中是虚拟的。“不工作”并不是对问题的理想描述。特别是,当其他人投入时间来解决您的问题时,至少要具体说明正在发生的事情。 (2认同)