c ++:在将指针传递给基类时访问派生类方法?

时间:2014-05-14 08:39:22

标签: c++ inheritance derived-class

我为这个引人注目的问题道歉,但我刚开始用面向对象的范式编程。

我有一个函数,它接受一个类void foo(myClass* C)的指针,这个类有自己的方法

      class myClass{
      public:
          double fooMethod();
          /* ... */
      }

现在我想使用重载方法foo传递给fooMethod一个对象,所以我考虑创建一个派生类

      class myDerivedClass : public myClass{
      public:
          double fooMethod(); // overloaded method
          /* ... */
      }

问题是如果我实例化一个对象myDerivedClass* D = new myDerivedClass并传递它foo(D),这个函数将使用基类的方法,即myClass::fooMethod(),而我希望它使用myDerivedClass::fooMethod()

我该如何实现?我有这个问题,因为我不想重写已经工作的代码,比如foomyClass,但是我想让我的新功能适应代码的当前结构。

非常感谢! 升。

2 个答案:

答案 0 :(得分:1)

在面向对象的编程中,为了派生类'当你调用基类时执行方法'您需要该方法为virtual的方法。在某些语言(如Java)中,默认情况下所有方法都是虚拟的,但在C ++中,您必须在基类的方法定义中手动添加关键字virtual,如下所示:

class myClass{
public:
    virtual double fooMethod();
    /* ... */
}

答案 1 :(得分:1)

你可以这样做

class myClass{
  public:
      virtual double fooMethod();
      /* ... */
  }

class myDerivedClass : public myClass{
  public:
      double fooMethod() override; // override  method, not overload
      /* ... */
  }

然后,如果您传递myDerivedClass对象指针/引用,并使用它来调用fooMethod(),则会调用overriden中的myDerivedClass方法。

概念是你可以override基类方法,而不是overload