C++ 重载与重写的区别与实现
1 . 前言在面向对象语言中经常提到重载与重写以下内容直观描述两者差异成员函数被重载的特征1相同的范围在同一个类中2函数名字相同3参数不同4virtual关键字可有可无。重写是指派生类函数重写基类函数是C的多态的表现特征是1不同的范围分别位于派生类与基类2函数名字相同3参数相同4基类函数必须有virtual关键字。2 . 差异图其中重写要求父类有虚函数模式函数名参数列表返回值重载一样不一样不一样重写一样一样一样3 . 重载下图所示 : 以下的func的参数列表多了int x或者返回值与父类函数不一样因此为重载父类声明虚函数的意义在于是否想要让子类重写1234567891011121314151617181920212223242526classObj_A{private:inta;public:virtualvoidfunc() {}};classObj_B :publicObj_A{private:inta;public:voidfunc(intx) {}intfunc() {}};4 . 重写下图所示 : 父类func声明为虚函数子类声明函数并且不改变函数名不改变参数列表不改变返回值因此为重写1234567891011121314151617181920212223classObj_A{private:inta;public:virtualvoidfunc() {}};classObj_B :publicObj_A{private:inta;public:voidfunc() {}};5 . 小结重载改变函数结构重写不改变函数结构1范围区别重写和被重写的函数在不同的类中重载和被重载的函数在同一类中。2参数区别重写与被重写的函数参数列表一定相同重载和被重载的函数参数列表一定不同。3virtual的区别重写的基类必须要有virtual修饰重载函数和被重载函数可以被virtual修饰也可以没有。