如有如下抽象基类A
class A{
public:
virtual int compare(T) = 0;
virtual void display(T) = 0;
};
派生类B
class B :public A{
public:
B(int s = 0){
m = s;
}
int get(){
return m;
}
protected:
int m;
};
此时派生类B里虽然没有纯虚函数,但仍然是抽象类。
重定义函数compara
class B :public A{
public:
B(int s = 0){
m = s;
}
int get(){
return m;
}
int compare(Score s){
if (m_iScore >s.m_iScore){
return 1;
}
else if (m_iScore ==s.m_iScore ){
return 0;
}
else{
return -1;
}
}
protected: int m;
};
此时,虽然有一个纯虚函数被定义,但B仍是抽象类
结论:抽象类的派生类有任何一个纯虚函数没有实现,那么不管其他做的再多,这个类仍然是一个抽象类。故虚基类的派生类在有纯虚函数未被定义前不能进行实例化。