c++ overwrite
- overwrite,派生类屏蔽了其同名的基类函数,返回值类型可以不同 特征:不同范围(基类和派生类)、函数名字相同、参数不同或者参数相同且无virtual关键字
C++中的Overload、Override和Overwrite - VictoKu - 博客园
. Overwrite(改写)
改写是指派生类的函数屏蔽(或者称之为“隐藏”)了与其同名的基类函数。正是这个C++的隐藏规则使得问题的复杂性陡然增加,这里面分为两种情况讨论:
(1)如果派生类的函数与基类的函数同名,但是参数不同。那么此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。那么此时,基类的函数被隐藏(注意别与覆盖混淆)。
借鉴一个网上的例子来看Overwrite(改写)的情况:
#include <iostream>
using namespace std;class Base {
public:
void f(float x) { cout << "Base::f(float)" << endl; }
void g(float x) { cout << "Base::g(float)" << endl; }
void h(float x) { cout << "Base::h(float)" << endl; }
};class Derived : public Base {
public:
void f(float x) { cout << "Derived::f(float)" << endl; } // 覆盖
void g(int x) { cout << "Derived::g(int)" << endl; } // 改写
void h(float x) { cout << "Derived::h(float)" << endl; } // 改写
};int main() {
Derived d;
d.f(1.0f); // 调用Derived::f(float)
d.g(1); // 调用Derived::g(int)
d.h(1.0f); // 调用Derived::h(float)
return 0;
}