C++类成员函数的 重载、覆盖和隐藏区别
重载:
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- class A
- {
- public:
- void show(int val) { cout << val; }
- void show(double val) { cout << val; }
- };
- int main(void)
- {
- A a;
- a.show();
- cout << endl;
- a.show(4.2);
- cin.get();
- }
覆盖(重写):
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- class A
- {
- public:
- virtual void show(int val) { cout << val; }
- };
- class B : public A
- {
- public:
- void show(int val) { cout << "--" << val << "--"; }
- };
- int main(void)
- {
- A a;
- a.show();
- cout << endl;
- A* p = new B;
- p->show();
- cin.get();
- }
隐藏:
隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,且参数也相同,但基类函数没有virtual
关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。
(3)但是,《Effective C++》条款36说:绝不重新定义继承而来的non-virtual函数,所以就不要这么做了。
注:小生看到别人的文档,遂加代码记录下来。不要告我啊!我没钱,O(∩_∩)O哈哈~
C++类成员函数的 重载、覆盖和隐藏区别的更多相关文章
- C++类成员函数的重载、覆盖和隐藏区别?
C++类成员函数的重载.覆盖和隐藏区别? a.成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无.b.覆盖是指派生类函数覆 ...
- C++:类成员函数的重载、覆盖和隐藏区别?
#include <iostream> class A { public: void func() { std::cout << "Hello" <& ...
- 【非原创】C++类成员函数的重载、覆盖和隐藏
链接:https://www.nowcoder.com/questionTerminal/266d3a6d4f1b436aabf1eff3156fed95来源:牛客网 题目:类成员函数的重载.覆盖和隐 ...
- 类成员函数的重载、覆盖和隐藏区别 (C++)(转)
类成员函数的重载.覆盖和隐藏区别 (C++) 这是本人第一次写博客,主要是想记录自己的学习过程.心得体会,一是可以方便以后回顾相关知识,二是可以与大家相互学习交流. 关于C++中类成员函数的重载. ...
- 类成员函数的重载、覆盖和隐藏区别 (C++)
这是本人第一次写博客,主要是想记录自己的学习过程.心得体会,一是可以方便以后回顾相关知识,二是可以与大家相互学习交流. 关于C++中类成员函数的重载.覆盖和隐藏区别,第一次看到这个问题是在准备找工作的 ...
- c++类成员函数的重载和覆盖有什么区别
1.成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. 2.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同 ...
- 成员函数的重载&&隐藏&&覆盖
/* *成员函数的重载,覆盖,隐藏 *重载: *1.同样的范围(在同一个类中) *2.函数名同样 *3.參数不同 *4.virtualkeyword可有可无 *覆盖是指派生类覆盖基类的函数,特征是: ...
- C++继承具体解释之二——派生类成员函数具体解释(函数隐藏、构造函数与兼容覆盖规则)
在这一篇文章開始之前.我先解决一个问题. 在上一篇C++继承详解之中的一个--初探继承中,我提到了在派生类中能够定义一个与基类成员函数同名的函数,这样派生类中的函数就会覆盖掉基类的成员函数. 在谭浩强 ...
- 重载运算符:类成员函数or友元函数
类成员函数: bool operator ==(const point &a)const { return x==a.x; } 友元函数: friend bool operator ==(co ...
随机推荐
- unsigned char 转字符串:
通常送显示的都是字符串,对于int long float转字符串有对应的函数,还有sprintf进行格式输出,对于嵌入式和单片机大多都用unsigned char型变量,转字符串需要自己编写函数,需要 ...
- PHP解析JSON和XML方法
一.JSON $r = json_decode("json数据"); $result = $r->result; //解析后的数据,以数组形式保存到r里面了,需要通过-> ...
- WebBrowserControl
Before navigating the URL, write meta into webbrowser's documenttext property as follows: //Setting ...
- mysqldump 数据库迁移并改换engine
1. 导出数据库 mysqldump -h172.18.165.xxx -P3306 -uroot -pxxx --add-drop-database --default-character-set= ...
- tomcat 部署多个项目的技巧
方法一.在tomcat的根目录下的 conf文件夹下的server.xml文件中的<Host>标签中加入: //docBase: 项目的webRoot path:访问路径 reloadab ...
- DEDE仿站经常用到的基本标签和变量
一.针对于DEDE后台基本设置里面的使用到的数据标签. 主标题:{dede:global.cfg_webname/} 主要用于<title></title>里面 网 站描述: ...
- SQL Server 2005中的分区表(五):添加一个分区(转)
所谓天下大事,分久必合,合久必分,对于分区表而言也一样.前面我们介绍过如何删除(合并)分区表中的一个分区,下面我们介绍一下如何为分区表添加一个分区. 为分区表添加一个分区,这种情况是时常会 发生的.比 ...
- rsyncd.conf 文件
uid = nobodygid = nobodymax connections = 10timeout = 60use chroot = noread only = falsepid file=/va ...
- Prevent Adding Component More than once
Question: I'm developing a C# component, I want to prevent the user from adding this component to th ...
- DDL(Oracle)
DDL 数据定义 建表 建视图 建其他 drop create table t (a varchar2 (10));可变字符串最大为10 transaction - ...