C ++调用子类的虚方法而不是基类

时间:2014-05-12 00:17:07

标签: c++ polymorphism virtual

我有一个基类Feature

feature.h中

#ifndef FEATURE_H   
#define FEATURE_H

#include <string>
#include <map>

using namespace std;

template <class T> class Feature
{
public:
    virtual map<string, double> calculate(T input)
    {
        map<string, double> empty;

        return empty;
    }
};

#endif FEATURE_H

儿童班AvgSentenceLength

avgSentenceLength.h

#include "text.h"
#include "feature.h"

class AvgSentenceLength : public Feature<Text>
{
public:
    map<string, double> calculate(Text text);
};

我尝试使用calculate对象从另一个文件调用AvgSentenceLength方法,而不是直接但仍然:

map<int, Feature<Text>> features;
AvgSentenceLength avgSentenceLength;
features.insert(pair<int, Feature<Text>>(1, avgSentenceLength));

map<string, double> featuresValues;
featuresValues = features.at(1).calculate(text);

我想调用子类的calculate方法,但它调用基类的calculate方法。我不能在基类中使用纯虚函数,因为必须创建此类的对象。

2 个答案:

答案 0 :(得分:4)

您需要将map<int, Feature<Text>>更改为map<int, Feature<Text>*>。要通过其基础调用多态函数,您需要一个间接级别,如指针或引用。

答案 1 :(得分:1)

只需在此行添加指针*map<int, Feature<Text>> features

这样就像这样:map<int, Feature<Text>*> features