📜  C ++ |虚函数|问题13(1)

📅  最后修改于: 2023-12-03 14:59:36.906000             🧑  作者: Mango

C++ |虚函数|问题13

问题描述

在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;
}

由于派生类Derivedfoo函数与基类Basefoo函数的函数名和参数列表不完全相同,编译器会报错:

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; }
                ^~~

因此,当派生类的虚函数和基类的虚函数的函数名和参数列表不完全相同,但是返回类型相同时,需要修改派生类的虚函数的函数名和参数列表,以保证与基类的虚函数完全匹配。

结论

当派生类的虚函数和基类的虚函数的函数名和参数列表不完全相同,但是返回类型相同时,编译器会报错。此时,需要修改派生类的虚函数的函数名和参数列表,以保证与基类的虚函数完全匹配。