作爲初學者,我在模板,繼承和純虛函數方面存在一些問題。專業純虛擬模板功能的另一個問題(未定義參考)
請考慮以下情況,其中概率是作爲RationalProbability實例化的抽象模板。
Probability.h:
template <class T>
class Probability
{
public:
T value;
//Operator overloading for +
virtual Probability<T>* operator+(const Probability<T>& p);
T getValue() const { return value; }
protected:
Probability(T val) {
value = val;
}
~Probability() {};
};
Probability.cpp:空
RationalProbability.h:
#include "Probability.h"
class RationalProbability: public Probability<float>
{
public:
RationalProbability(float prob);
virtual ~RationalProbability();
RationalProbability* operator+(const RationalProbability& p);
};
RationalProbability.cpp:
#include "RationalProbability.h"
RationalProbability::RationalProbability(float prob): Probability(prob) {}
RationalProbability::~RationalProbability()
{
}
RationalProbability* RationalProbability::operator+(const RationalProbability& p) {
RationalProbability* rp = new RationalProbability(p.getValue() + this->value);
return rp;
}
我得到以下呃ROR:
Error:undefined reference to
Probability<float>::operator+(Probability<float> const&)
這是事實,不存在具有該確切簽名無功能,但RationalProbability與
RationalProbability: public Probability<float>
您沒有指定純虛擬函數,因此預計會有實現。 –
並且'operator +()'返回一個指向動態分配對象的指針.... blech !!!這不是Java。 – Peter