在C++中,子类是不能重载父类函数的,因为重载只发生在同一个类中。

所以在不考虑虚函数重写的情况下,子类中所有的同名函数(仅仅是与父类的函数名称相同),都会导致父类的同名函数被隐藏

见代码:

#include <stdio.h>
#include <stdlib.h>class CFather
{
public:void Test(){Print();}void Print(){printf("CFather\n");}
};class CChild:public CFather
{
public:void Test(){Print();}void Print(){printf("CChild\n");}
};int main()
{CChild child;child.Test();child.Print();system("pause");
}

在父类CFather和子类CChild中均实现了Test和Print方法,在main函数中声明了一个CChild类的对象,此时调用Test和Print方法,输出结果如下:

以上的输出结果还是很好理解的,CChild类当然调用的是自己实现的方法。

那么以下的代码呢?

#include <stdio.h>
#include <stdlib.h>class CFather
{
public:void Test(){Print();}void Print(){printf("CFather\n");}
};class CChild:public CFather
{
public:void Print(){printf("CChild\n");}
};int main()
{CChild child;child.Test();child.Print();system("pause");
}

CChild类中仅仅实现了Print这个同名函数,此时调用CChild从父类继承过来的Test方法,输出结果会怎么样呢?

其实也很好理解,父类的Test方法内部调用的Print方法当然是父类自己的Print方法,因为是普通函数,不具有多态的特性

根据以上代码,可以总结归纳几点:
1、对于父类而言,子类的所有函数均不可见。
2、对于子类而言,父类中所有的同名函数都被隐藏了。
3、在父类的其他函数中访问同名函数,访问的均为父类的同名函数。
4、在子类的其他函数中访问同名函数,访问的均为子类的同名函数。

内容可能有些重复,但无伤大雅。

PS,顺带提一下,在子类中需要访问父类的同名函数时,一般用__super关键字来访问而不建议用父类的名称,因为会给人一种调用静态方法的感觉,例子如下:


#include <stdio.h>
#include <stdlib.h>class CFather
{
public:void Test(){Print();}void Print(){printf("CFather\n");}
};class CChild:public CFather
{
public:void Test(){Print();}void Print(){printf("CChild\n");}void FatherTest(){//CFather::Test();  //建议用__super::__super::Test();}void FatherPrint(){//CFather::Print();__super::Print();}
};int main()
{CChild child;child.Test();child.Print();child.FatherTest();child.FatherPrint();system("pause");
}

子类隐藏父类的同名函数相关推荐

  1. 继承- 子类与父类有同名函数,变量

    学习了类的继承,今天说一下当父类与子类中有同名函数和变量时那么程序将怎么执行.首先明确当基类和子类有同名函数或者变量时,子类依然从父类继承. 举例说明: 例程说明: 父类和子类有同名的成员 data: ...

  2. JS实现子类调用父类的同名函数函数

    图像的实现 代码实现 function parent() {this.initialize = function() {this.x = 1;this.y = 1;},this.initialize( ...

  3. c++继承父类的子类,如何调用父类的同名函数?

    https://blog.csdn.net/qq_26399665/article/details/52080215 子类调用父类的同名函数: 子类和父类返回值参数相同,函数名相同,有virtual关 ...

  4. C++ - 子类与父类的同名成员变量

    1.思考 子类中是否可以定义父类中的同名成员?如果可以,如何区分?如果不可以,为什么? 代码示例: #include <iostream> #include <string>u ...

  5. 子类与父类的同名成员调用和注意事项

    class Father {//父类 public:Father() {a = 100;}void func() {cout << "father::func()" & ...

  6. C++:从子类访问父类的私有函数

    C++:从子类访问父类的私有函数 转自 龙音阁http://blog.sina.com.cn/dragonsound 感谢原作者的工作 (2009-09-01 22:44:21) 标签: 虚函数 c ...

  7. C++ 从子类访问父类的私有函数(看的我发愣)

    众所周知,c和c++的数组都是不安全的,因为无论c还是c++都不提供数组边界检查功能,这使得数组溢出成为可能. 从某个意义上说,c和c++是一种缺少监督的语言,然而这也正是其魅力所在.c++给予程序员 ...

  8. 【Java】继承——子类与父类有同名属性的情况。

    package TcmStudy.day20;class Father{public int a = 10;public int b = 20; } class Son extends Father{ ...

  9. C++子类实现父类纯虚函数实现父类获取子类信息

    C++子类实现父类纯虚函数实现父类获取子类信息 在C++中,我们可以通过继承和多态来实现代码的复用和扩展.其中,纯虚函数是实现多态的重要机制之一.在父类中声明一个纯虚函数,在子类中实现该纯虚函数,可以 ...

最新文章

  1. smarty安装与配置
  2. 倒置 mysql_SQL Server中的行列倒置技巧
  3. Java线程详解(14)-信号量
  4. centos 6.8安装git_CentOS7安装GitLab、汉化、邮箱配置及使用
  5. rfid6-写成platform驱动
  6. 使用Maven管理Eclipse Java项目
  7. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)
  8. 从零打造Android计算器(安卓开发初体验)
  9. Bodymovin插件的使用
  10. java 保存微信表情_【java】【mysql】存储微信表情emoji表情
  11. estore简版商城
  12. 修复计算机win10,快速修复Win10系统故障的两大通用方法
  13. 凭证打印纸的规格(打印凭证选择什么型号的纸)
  14. emWin在PC上的模拟
  15. 如何利用状态机编程实现启保停控制(含Stateflow模型介绍)
  16. Called attach on a child which is not detached
  17. HTML5七夕情人节表白网页制作【canvas生日快乐文字烟花背景动画特效】HTML+CSS+JavaScript 生日快乐代码
  18. SQL查询优化外连接和内连接
  19. 阿里云redis大key搜索工具
  20. 随机森林分类算法python代码_Python机器学习笔记:随机森林算法

热门文章

  1. 化工厂理化实验室设计、化工厂实验室装修SICOLAB
  2. linux x11 命令,linux-X11配置.doc
  3. ElasticSearch- 单节点 unassigned_shards 故障排查
  4. 如何高效使用SQLite .net (C#)
  5. 记重装Win10踩过的坑
  6. 重装系统:电脑进入BIOS方法大全!!
  7. [leetcode]1.两数之和 + 哈希表:梦开始的地方,英语的abandon
  8. 航天院入两万,是一种什么体验!
  9. Windows2008关机时蓝屏而后重启的解决
  10. asserted与deasserted