У меня есть базовый класс:Базовый класс является абстрактным, а полученный также является абстрактным?
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 является абстрактным классом, и я не могу создать его экземпляр. Что я делаю не так?
Edit: я их реализовать, но не добавить их здесь
Да потому, что вы не определили чистые виртуальные методы ('' output' и less') в производном классе. – Vikas
Я сделал, но не добавил их по ошибке :(извините –
На несвязанной ноте, это ** никогда ** имеет смысл префикс ваших классов с 'C' (или любым связанным префиксом). Это« соглашение »возникло из непонимание, не более того (Microsoft использовала его, когда их компилятор еще не понимал пространства имен, чтобы устранить неоднозначность с другими классами, но даже тогда он не предназначался для использования всеми, чтобы не было потеряно значение). –