我有基类:基类是抽象的,派生也是抽象的?
class CDigit
{
private:
int m_iDigit;
public:
CDigit()
{
m_iDigit = 0;
}
CDigit(const int digit)
{
m_iDigit = digit;
}
void setDigit(const int digit)
{
m_iDigit = digit;
}
int getDigit() const
{
return m_iDigit;
}
virtual void output(ostream &x) = 0;
virtual bool less(CDigit *pDigit) = 0;
};
和派生类
class CExpected : public CDigit
{
private:
int m_iExpFreq;
public:
CExpected() : CDigit()
{
m_iExpFreq = 0;
}
CExpected(const int dig, const int freq) : CDigit(dig)
{
m_iExpFreq = freq;
}
CExpected(const CExpected& ce)
{
m_iExpFreq = ce.m_iExpFreq;
this->setDigit(ce.getDigit());
}
void output(ostream &x)
{
x<<this->getDigit()<<" "<<this->m_iObsFreq;
}
bool less(CObserved *pDigit)
{
if((pDigit->getDigit() == this->getDigit()) && (pDigit->getObserved() == this->getObserved()))
return true;
else
return false;
}
...
};
的问题是,编译器告诉我,CExpected是一个抽象类,我不能实例化。我究竟做错了什么?
编辑:我已经实现他们却没有在这里
是的,因为你还没有定义的纯虚方法('output'和'less')在派生类中。 – Vikas
我做了,但没有添加他们的错误:(对不起 –
在一个不相关的说明,它**从来没有**是有道理的前缀类与'C'(或任何相关的前缀)。这种“约定”出现一个误解,没有更多的东西(微软在编译器还没有理解命名空间时使用了它,以便与其他类消除歧义;但即使这样也不意味着每个人都使用它,以免消除歧义) –