📅  最后修改于: 2023-12-03 14:59:36.906000             🧑  作者: Mango
在C++中,当派生类的虚函数和基类的虚函数的函数名和参数列表不完全相同,但是返回类型相同时,会发生什么?
在C++中,派生类可以覆盖(override)基类的虚函数,即定义与基类的虚函数具有相同名称和参数列表的虚函数。但是,当派生类的虚函数和基类的虚函数的函数名和参数列表不完全相同,但是返回类型相同时,编译器会发生错误,因为C++规定重载时名字和参数必须完全一样,否则会被视为非法重新定义。
例如,考虑以下代码片段:
class Base {
public:
virtual void foo() {}
};
class Derived : public Base {
public:
virtual int foo() { return 0; }
};
int main() {
Derived D;
return 0;
}
由于派生类Derived
的foo
函数与基类Base
的foo
函数的函数名和参数列表不完全相同,编译器会报错:
error: member function ‘virtual int Derived::foo()’ with the same name and parameter types as virtual function Base::foo() has different return type [-fpermissive]
virtual int foo() { return 0; }
^~~
因此,当派生类的虚函数和基类的虚函数的函数名和参数列表不完全相同,但是返回类型相同时,需要修改派生类的虚函数的函数名和参数列表,以保证与基类的虚函数完全匹配。
当派生类的虚函数和基类的虚函数的函数名和参数列表不完全相同,但是返回类型相同时,编译器会报错。此时,需要修改派生类的虚函数的函数名和参数列表,以保证与基类的虚函数完全匹配。