当前位置:网站首页>子类隐藏父类的同名函数
子类隐藏父类的同名函数
2022-07-03 15:20:00 【宇龍_】
在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");
}

边栏推荐
- 函数栈帧的创建和销毁
- Seckill system 3- product list and product details
- Calibre LVL
- 第04章_逻辑架构
- qt使用QZxing生成二维码
- Popular understanding of random forest
- Digital image processing -- popular understanding of corrosion and expansion
- Kubernetes will show you from beginning to end
- 【日常训练】395. 至少有 K 个重复字符的最长子串
- 视觉上位系统设计开发(halcon-winform)-5.相机
猜你喜欢

Halcon与Winform学习第二节

Summary of JVM knowledge points

Characteristics of MySQL InnoDB storage engine -- Analysis of row lock
![Mysql报错:[ERROR] mysqld: File ‘./mysql-bin.010228‘ not found (Errcode: 2 “No such file or directory“)](/img/cd/2e4f5884d034ff704809f476bda288.png)
Mysql报错:[ERROR] mysqld: File ‘./mysql-bin.010228‘ not found (Errcode: 2 “No such file or directory“)

Solve the problem that pushgateway data will be overwritten by multiple push

高并发下之redis锁优化实战

Kubernetes advanced training camp pod Foundation

Seckill system 2 redis solves the problem of distributed session

Halcon与Winform学习第一节

求字符串函数和长度不受限制的字符串函数的详解
随机推荐
Detailed pointer advanced 2
视觉上位系统设计开发(halcon-winform)-1.流程节点设计
【云原生训练营】模块七 Kubernetes 控制平面组件:调度器与控制器
Didi off the shelf! Data security is national security
[pytorch learning notes] transforms
MySQL reports an error: [error] mysqld: file '/ mysql-bin. 010228‘ not found (Errcode: 2 “No such file or directory“)
redis单线程问题强制梳理门外汉扫盲
整形和浮点型是如何在内存中的存储
Halcon and WinForm study section 1
Incluxdb2 buckets create database
Markdown file titles are all reduced by one level
[cloud native training camp] module VIII kubernetes life cycle management and service discovery
求字符串函数和长度不受限制的字符串函数的详解
Atlas atlas torque gun USB communication tutorial based on mtcom
What is machine reading comprehension? What are the applications? Finally someone made it clear
Solve the problem that pushgateway data will be overwritten by multiple push
Popular understanding of decision tree ID3
Tensorflow realizes verification code recognition (III)
运维体系的构建
从 flask 服务端代码自动生成客户端代码 -- flask-native-stubs 库介绍