C++ 覆盖与重写是不是一回事

如题所述

C++中的覆盖与重写并不相同。覆盖本质上是隐藏,当派生类与基类具有相同名称的函数时,如果基类的函数不是虚函数,那么这种情况属于覆盖。

而重写则要求基类的函数必须是虚函数,且派生类重写函数的返回类型、名称和参数必须与基类一致。重写虚函数是为了确保子类可以提供特定行为的实现,同时保持基类接口的统一性。

覆盖和重写的目的都是为了实现运行时的多态性,使得在调用时能够根据对象的实际类型选择合适的函数执行。

覆盖时,派生类中的函数会隐藏基类的同名函数,因此需要明确调用哪个函数。例如,如果基类有一个非虚函数`show()`,派生类也定义了一个同名函数`show()`,那么在派生类对象上调用`show()`时,实际上是调用了派生类的`show()`,而非基类的。

重写则不同,它确保了在多态调用中,能够根据对象的类型动态地调用正确的实现。例如,基类定义了一个虚函数`show()`,派生类重写了这个函数,那么在多态调用中,将根据对象的实际类型调用相应的`show()`实现。

综上所述,覆盖和重写虽然都涉及派生类与基类之间的函数关系,但它们的目的和实现方式有所不同。理解这两者的区别对于正确使用C++中的多态性至关重要。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜