c++ - 从通用基类引用调用派生类方法

标签 c++ oop polymorphism

我有一个基类

class base {
  public:
    base();
    int someData;
    virtual void foo(){
      std::cout << someData;
    }
};

和一些派生类,比如

class derived : public base {
  public:
    derived();
    void foo(){
     std::cout << someData * 5;
  }
};

基本上它们拥有相同类型的数据,但对这些数据的操作不同。 我有另一个类不需要知道我的对象的详细信息,它需要做的就是设置数据并调用派生的 foo()。

class useData {
  public:
    useData();

    base x;
    int do() { x.someData = 5; return x.foo(); }
};

我希望“useData”尽可能通用,因此我在其定义中使用基类而不是派生类。 当然,在这种情况下,它将调用基方法而不是派生方法。如何重写我的代码或使其自动(无需类型检查或类似操作)调用派生方法?

谢谢

最佳答案

要使用多态性,您需要一些指针或引用。所以在 useData 中,变量 x 应该声明为 base *。之后,您可以使用带有任何派生类的 new 创建。多态性将按预期执行..

关于c++ - 从通用基类引用调用派生类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19301511/

相关文章:

c++ - 在同一个类的每个对象上调用方法

python - Python 中的属性引用

c++ - 从 baseclassptrVec 类型转换派生类 ptr_Vector,最好的方法是什么?

c++ - 拥有多态对象集合的首选 C++ 习惯用法是什么?

c++ - 在 Visual Studio 中放置并插入 unordered_map?

c++ - 为什么非侵入式序列化要添加 5 字节零前缀?

java - 如何摆脱 this() 构造函数中的长调用?

java - java中多态性的小误区

c++ - 无法在Mac上的Visual Studio代码中调试C++。 Launch.json在终端中不执行程序

c++ - 获取从 grpc 客户端传输的二进制数据