gpt4 book ai didi

c++ - 在具有相同名称但返回类型不同的派生类中创建新函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:32 26 4
gpt4 key购买 nike

//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;因为它在我的实验室说明中,无法更改。我必须在 derived2 的显示函数中调用 Derived1 的显示函数,这很简单,我明白这一点。像这样

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() 做的事情被认为是重载,而不是覆盖,对吗?

最佳答案

你不能这样做,因为返回类型不是协变的!

我认为您错过了“实验室”的要求。也阅读这些:

  1. Override a member function with different return type
  2. C++ virtual function return type

顺便说一下,欢迎来到 StackOverflow...确保为您以后的问题构建一个最小示例,以便其他人重现您的问题,帮助他们,帮助您!这是这种情况下的最小示例示例:

#include <iostream>

class Base {
public:
virtual std::ostream& display(std::ostream& os) const =0;
};

class Derived1 : Base {
public:
std::ostream& display(std::ostream&) const
{
std::cout << "in Derived1.display" << std::endl;
}
};

class Derived2 : Derived1 {
public:
void display(std::ostream&) const
{
std::cout << "in Derived2.display" << std::endl;
}
};

int main()
{
Derived2 A;
A.display(std::cout);
return 0;
}

这会产生这个错误:

main.cpp:18:10: error: virtual function 'display' has a different return type
('void') than the function it overrides (which has return type
'std::ostream &' (aka 'basic_ostream<char> &'))
void display(std::ostream&) const
~~~~ ^
main.cpp:10:19: note: overridden virtual function is here
std::ostream& display(std::ostream&) const
~~~~~~~~~~~~~ ^

关于c++ - 在具有相同名称但返回类型不同的派生类中创建新函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39310489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com