C++ 重载与重写的区别与实现
1 . 前言
在面向对象语言中,经常提到重载与重写,以下内容直观描述两者差异
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual关键字可有可无。
重写是指派生类函数重写基类函数,是C++的多态的表现,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual关键字。
2 . 差异图
其中,重写要求父类有虚函数
模式 | 函数名 | 参数列表 | 返回值 |
---|---|---|---|
重载 | 一样 | 不一样 | 不一样 |
重写 | 一样 | 一样 | 一样 |
3 . 重载
下图所示 : 以下的func的参数列表多了int x或者返回值与父类函数不一样,因此为重载,父类声明虚函数的意义在于是否想要让子类重写
class Obj_A { private: int a; public: virtual void func() { } }; class Obj_B : public Obj_A { private: int a; public: void func(int x) { } int func() { } };
4 . 重写
下图所示 : 父类func声明为虚函数,子类声明函数并且不改变函数名,不改变参数列表,不改变返回值,因此为重写
class Obj_A { private: int a; public: virtual void func() { } }; class Obj_B : public Obj_A { private: int a; public: void func() { } };
5 . 小结
重载改变函数结构,重写不改变函数结构
(1)范围区别:重写和被重写的函数在不同的类中,重载和被重载的函数在同一类中。
(2)参数区别:重写与被重写的函数参数列表一定相同,重载和被重载的函数参数列表一定不同。
(3)virtual的区别:重写的基类必须要有virtual修饰,重载函数和被重载函数可以被virtual修饰,也可以没有。
到此这篇关于C++ 重载与重写的区别与实现的文章就介绍到这了,更多相关C++ 重载与重写内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
你真的理解C语言qsort函数吗 带你深度剖析qsort函数
这篇文章主要介绍了你真的理解C语言qsort函数吗?带你深度剖析qsort函数,本篇将引入一个库函数来实现我们希望的顺序,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下2023-02-02C++实现基于不相交集合的O(mlgn)复杂度的kruskal算法
这篇文章主要为大家详细介绍了C++如何实现基于不相交集合的O(mlgn)复杂度的kruskal算法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下2023-02-02
最新评论