【发布时间】:2012-05-21 04:36:33
【问题描述】:
我有基类:
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)。 -
我做了但没有错误地添加它们:(对不起
-
在不相关的注释中,从不为您的类添加前缀
C(或任何相关前缀)是有意义的。这个“约定”源于一个误解,仅此而已(微软在他们的编译器还不理解命名空间时使用它,以消除与其他类的歧义;但即便如此,它也不是每个人都可以使用,以免消除歧义丢失)。 -
此外,具有
if (…) return true; else return false;形式的代码也没有意义,而且风格不好。只需将其替换为return …; -
我的任务需要这样命名。很高兴知道。
标签: c++ oop inheritance