C++中重载、重写(覆盖)和隐藏的区别实例分析
本文实例讲述了C++中重载、重写(覆盖)和隐藏的区别,对于C++面向对象程序设计来说是非常重要的概念。具体分析如下:
1.重载:重载从overload翻译过来,是指
示例代码如下:
classA{ public: voidtest(inti); voidtest(doublei); voidtest(inti,doublej); voidtest(doublei,intj); inttest(inti);//错误,非重载 };
前四个互为重载函数,最后一个和第一个不是重载函数。
2.隐藏:隐藏是指
实例代码如下:
#include<iostream> usingnamespacestd; classA{ public: voidfun1(inti,intj){ cout<<"A::fun1():"<<i<<""<<j<<endl; } }; classB:publicA{ public: //隐藏 voidfun1(doublei){ cout<<"B::fun1():"<<i<<endl; } }; intmain(){ Bb; b.fun1(5);//调用B类中的函数 b.fun1(1,2);//出错,因为基类函数被隐藏 system("pause"); return0; }
3.重写:重写翻译自override,也翻译成覆盖(更好一点),是指
实例代码如下:
#include<iostream> usingnamespacestd; classA{ public: virtualvoidfun3(inti){ cout<<"A::fun3():"<<i<<endl; } }; classB:publicA{ public: //重写 virtualvoidfun3(doublei){ cout<<"B::fun3():"<<i<<endl; } }; intmain(){ Aa; Bb; A*pa=&a; pa->fun3(3); pa=&b; pa->fun3(5); system("pause"); return0; }
上面为虚函数实现多态的代码,不明白的先看虚函数实现多态的原理。
重载和重写的区别:
(1)范围区别:
(2)参数区别:
(3)virtual的区别:
隐藏和重写,重载的区别:
(1)与重载范围不同:
(2)参数的区别:
调试运行如下代码:
#include<iostream> usingnamespacestd; classA{ public: voidfun1(inti,intj){ cout<<"A::fun1():"<<i<<""<<j<<endl; } voidfun2(inti){ cout<<"A::fun2():"<<i<<endl; } virtualvoidfun3(inti){ cout<<"A::fun3(int):"<<i<<endl; } }; classB:publicA{ public: //隐藏 voidfun1(doublei){ cout<<"B::fun1():"<<i<<endl; } //重写 voidfun3(inti){ cout<<"B::fun3(int):"<<i<<endl; } //隐藏 voidfun3(doublei){ cout<<"B::fun3(double):"<<i<<endl; } }; intmain(){ Bb; A*pa=&b; B*pb=&b; pa->fun3(3);//重写,多态性,调用B的函数 b.fun3(10);//隐藏,调用B的函数 pb->fun3(20);//隐藏,调用B的函数 system("pause"); return0; }
输出结果为:
B::fun3(int):3 B::fun3(int):10 B::fun3(int):20 请按任意键继续...
希望本文所述对大家C++面向对象程序设计有所帮助。
相关文章
- EasyC++36,函数的默认参数
- C++大作业 题目一、二
- C++最佳实践 | 4. 可维护性
- C++字符串加密_c++字符串连接函数
- c++的链表-链表入门(C++)
- C/C++ 远程线程DLL注入
- 十种主流模型C++部署演示
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-456 求链表各节点的平均值(C++解法)
- 基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型
- 【C++】通过stack、queue、deque理解适配器模式
- C++11 多线程编程 使用lambda创建std::thread (生产/消费者模式)详解编程语言
- C++基类和派生类指针的相互赋值和转换
- C++ list,STL list(双向链表)详解
- Visual C++ 运行库 v20200327 合集包
- C++中引用(&)的用法与应用实例分析
- C++多文件变量解析
- C++中CSimpleList的实现与测试实例
- C++之CNoTrackObject类和newdelete操作符的重载实例
- C++封装IATHOOK类实例
- C++广播通信实例
- C++实现ping程序实例
- 让Sqlite脱离VC++Runtime独立运行的方法
- C++形参与实参的区别实例解析
- C++实现汉诺塔算法经典实例
- VC++操作SQLite简单实例
- C++虚函数表实例分析