C++ 覆盖(Override)与隐藏(Overwrite)的区别与解析
C++ 覆盖(Override)与隐藏(Overwrite)的区别与解析
在C++中,覆盖和隐藏是两个不同的概念,它们涉及到派生类对基类成员函数的重定义。
覆盖 (Override)
- 覆盖是指派生类重新定义基类中已存在的虚函数。
- 覆盖时,派生类函数与基类函数必须同名且参数列表相同。
- 覆盖的目的是实现多态性,即根据对象的实际类型来调用不同的函数版本。
隐藏 (Overwrite)
- 隐藏是指派生类重新定义基类中已存在的非虚函数。
- 隐藏时,派生类函数与基类函数必须同名,但参数列表可以不同。
- 隐藏会导致基类函数被隐藏,无法在派生类对象中直接访问。
正确答案:
A、B、C 正确。D 错误,实现隐藏时可以同名但参数列表可以不同。
示例代码:
#include <iostream>
class Base {
public:
virtual void func() { std::cout << "Base::func()" << std::endl; }
void func2() { std::cout << "Base::func2()" << std::endl; }
};
class Derived : public Base {
public:
void func() override { std::cout << "Derived::func()" << std::endl; }
void func2() { std::cout << "Derived::func2()" << std::endl; }
};
int main() {
Derived d;
d.func(); // 调用 Derived::func()
d.func2(); // 调用 Derived::func2(), 隐藏了 Base::func2()
return 0;
}
总结:
覆盖和隐藏是C++中重要的概念,它们在实现多态性、控制函数调用等方面起着关键作用。理解它们的区别,并正确运用它们,可以使你的代码更加清晰、灵活和易于维护。
原文地址: https://www.cveoy.top/t/topic/oiAP 著作权归作者所有。请勿转载和采集!