大神请指教c++错误:返回类型与重写虚拟函数的返回类型既不相同也不协变

#include
using namespace std;

class base1{
public:
virtual void display() const;

};

void base1::display() const{
cout<<"base1::display()"<<endl;
}

class base2:public base1{
public:
void display() const;
};

void base2::display() const{
cout<<"base2::dispaly()"<<endl;
}

class driver:public base2{
public:
int display() const; //这边为什么会报错?
};

int driver::display() const{
cout<<"driver::display()"<<endl;
return 0;
}

void fun(base1* ptr){
ptr->display();
}

int main(){
base1 base1;
base2 base2;
driver driver;
fun(&base1);
fun(&base2);
fun(&driver);
return 0;
}

函数名一样,形参一样,所以在派生类中,尽管没有加virtual,它还是虚函数.
根据规则,一般来说,子类对父类某一函数进行重写,必须具备相同的返回值类型。这一规则对协变返回类型却有所放松,也即,子类对父类的某一函数进行重写时,子类函数的返回值类型可以父类函数返回值类型的子类的指针或者引用类型,语义上要求子类与父类能够构成一种is-a关系。

最后那个覆盖两种类型不一样,一个void,一个int

为什么覆盖类型要一样?是什么语法?新手不太懂、、请详细指教@纹枰老妖

我找时间上机看看你这段代码,现在在外面不档便。。