C++ 如何首先从基类调用相同的方法,然后从派生类调用?

标签 c++

这段代码可以帮助理解我想要什么:

class Base
{
  public:
    void foo()
    {
        print("Base\n");
        Derived::foo(); // smth like that.
    }
};

class Derived:public Base
{
  public:
    void foo()
    {
        print("Derived\n");
    }
}

int main()
{
  Derived bar;
  bar.foo();

  return 0;
}

有什么想法吗?

附言非常糟糕的想法是传递给派生的 foo 指针。

最佳答案

您需要基类来保存它的派生类的句柄,如下例所示:

template<typename T>
class Base {
  T *handle;
protected:
  Base(T *_handle) : handle(_handle) {}
public:
  void foo() {
    std::cout << "Base" << std::endl;
    handle->foo();
  }
};

class Derived : public Base<Derived> {
public:
  Derived() : Base(this) { }
  void foo() { std::cout << "Derived" << std::endl; }
};

LIVE DEMO

关于C++ 如何首先从基类调用相同的方法,然后从派生类调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067138/

相关文章:

c++ - 重载可变长度模板函数的递归结束

c++ - 如何从 C++ 中的函数返回 QSqlQueryModel?

c++ - 用 nullptr 初始化

c++ - 无符号和有符号整数

c++ - 第三方库应该放在哪里?

c++ - 混合 Rcpp 模块和 Rcpp::export

c++ - 数组运算符重载

c++ - 如何仅传递绑定(bind)函数的第二个参数?

c++ - 如何更改 Eigen 的版本

c# - C# 中的 foreach 和带有 List<T> 的传统 for 循环