帝江VII 2015-12-24 08:00 采纳率: 100%
浏览 5398
已采纳

大神请指教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;
}

  • 写回答

4条回答 默认 最新

  • 帝江VII 2017-02-08 09:26
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?