【发布时间】:2017-01-11 15:18:22
【问题描述】:
//Base.h
Class Base {
//...
public:
virtual std::ostream& display(std::ostream& os) const =0;
}
//Derived1.h
Class Derived1 : Base {
//...
public:
std::ostream& display(std::ostream&) const;//defined in Derived1.cpp
}
//Derived2.h
Class Derived2 : Derived1{
//...
public:
void display(std::ostream&) const;//error here!!!!!!!!!!!!!!!!!!!!
}
我必须使用 void display(std::ostream&) const;因为它在我实验室的说明中,无法更改。 我必须在派生2的显示函数中调用派生1的显示函数,这很简单,我明白这一点。就这样
void Derived2::display(std::ostream& os) const{
Derived1::display(os);
}
它会像这样在main中调用
Derived2 A;
A.display(std::cout);
Derived2 中的错误是“返回类型与被覆盖的虚函数的返回类型“std::ostream &”不同也不协变”
从我读到的内容来看,这是因为函数的签名(在这种情况下为返回类型)必须与它被覆盖的函数匹配,但我认为我的实验室希望我创建一个新函数而不是覆盖它,但具有相同的姓名?因为我必须在 Derived2 的 display() 中调用 Derived1 的 display()。有什么想法吗?
哦,是的,我试图用 display() 做的事情被认为是重载,而不是覆盖,对吗?
【问题讨论】:
标签: c++ function oop inheritance pure-virtual