如有如下抽象基类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仍是抽象类
结论:抽象类的派生类有任何一个纯虚函数没有实现,那么不管其他做的再多,这个类仍然是一个抽象类。故虚基类的派生类在有纯虚函数未被定义前不能进行实例化。