首页 > 解决方案 > 如何从需要基类指针的函数调用派生类的方法?

问题描述

自从我做了很多 C++ 编码以来已经很长时间了,我已经忘记了很多。可以来帮我指出正确的方向吗?

假设我有以下课程:

class A
{
  // Normal Class Stuff
  bool doSomething( void);
}
bool A::doSomething( void)
{
  return( true);
}
class B : private A
{
  // Normal Class Stuff
  bool doSomething( void);
  void doSomethingElse( void);
}
bool B::doSomething( void)
{
  doSomethingElse();
  return( A::doSomething);
}
void B::doSomethingElse( void)
{
  // Something Else
}
class foo
{
  // Normal Class Stuff
  void foo_stuff( A * ptr);
}
void foo_stuff( A * ptr)
{
  if( ptr->doSomething())
  {
    // Some Stuff
  }
}

有没有办法让我传递一个指向 B 类的指针并让它处理 B::doSomething 而不必重写 foo 类?本质上,我不想修改类 foo,但我需要能够在跳转到 A::doSomething 之前执行 B::doSomethingElse。

谢谢你。

标签: c++inheritanceoverloading

解决方案


基类的dtor()和 功能必须标明virtual

我将 A 类的访问关键字更改为,public以便可以从类 foo 调用它。

class A
{
public:
  virtual bool doSomething(void);
  virtual ~A() noexcept;
}

并且建议 B 类覆盖其父函数以附加override关键字。

class B : public A
{
public:
  bool doSomething(void) override;
  virtual ~B() noexcept;
}

推荐阅读