我有一个base类:

base.cpp:

#include "base.h"

base::base()
{
}

base::~base() {
}

void base::baseMethod(int a)
{
    std::cout<<"base::baseMethod : "<<a<<std::endl;
}

基数
#ifndef BASE_H
#define BASE_H

#include <iostream>

class base {
public:
    base();
    base(const base& orig);
    virtual ~base();
    void baseMethod(int);

private:
};

#endif /* BASE_H */

我有从基础派生的derivative

导数
#include "derivative.h"

derivative::derivative() : base(){
}

derivative::~derivative() {
}

void derivative::baseMethod(int a)
{
    std::cout<<"derivative::baseMethod : "<<a<<std::endl;
}

void derivative::derivativeMethod(int a)
{
   baseMethod(a);
   derivative::baseMethod(a);
}

导数
#ifndef DERIVATIVE_H
#define DERIVATIVE_H

#include "base.h"

class derivative : public base{
public:
    derivative();
    derivative(const derivative& orig);
    virtual ~derivative();

    void derivativeMethod(int);
    void baseMethod(int);
private:

};

#endif /* DERIVATIVE_H */

main.cpp
derivative t;
t.baseMethod(1);
t.derivativeMethod(2);

输出是:
derivative::baseMethod : 1
base::baseMethod : 2
base::baseMethod : 2

当我使用派生类对象调用baseMethod时,实际上我正在使用派生类的baseMethod。但是,当我调用derivetiveMethod时,我正在使用基类的baseMethod。这是为什么 ?以及如何调用派生类的baseMethod?
谢谢。

我正在使用Netbeans 8.2Windows 7 x64g++ 5.3.0 (mingw)

最佳答案

您需要在基类中创建baseMethod virtual:
virtual void baseMethod(int);
您无需在子类中“重新确认” virtual的样式,但是为了清楚起见,有些人这样做。 (这也包括子类中的析构函数)。

10-08 13:19