如有如下抽象基类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仍是抽象类

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