作为初学者,我在模板,继承和纯虚函数方面存在一些问题。专业纯虚拟模板功能的另一个问题(未定义参考)
请考虑以下情况,其中概率是作为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