博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重载、覆盖、隐藏
阅读量:4311 次
发布时间:2019-06-06

本文共 954 字,大约阅读时间需要 3 分钟。

学习过C++基础课程的人,对重载函数的概念相对熟悉一些,但是对覆盖和隐藏就相对陌

生了,在编程技术的学习上,你会发现一个规律,很多知识点你都知道,但是一旦用起来,

就常常出错,为什么呢?笔者一直都在探索这个问题。。

   重载函数有哪些特性呢?

   《高质量C++/C编程指南》已经清晰的列出了重载函数的特性:

    (1)相同的范围(在同一个类中);

    (2)函数名字相同;
    (3)参数不同;
    (4)virtual关键字可有可无。

     因为函数参数不同,可以简单的理解为:两个重载函数是不同的函数,调用者能够明确的根据不同的参数来调用不同的函数。那么如果存在这样两个函数,编译器怎么处理呢?

class A

{
public:
    void Func(int a, int b=0) {printf("This is Func1/n");}
    void Func(int a) {printf("This is Func2/n");}
};

int main()

{
    A a;
    a.Func(5);
    return 0;
}

当然,对于这样两个函数,调用者不知道应该调用哪个函数,故编译器直接报错。

我们在看看,覆盖和隐藏分别是什么特性呢?从字面意思来讲,覆盖和隐藏都具有一个把另

一个给遮住了,那只不过是谁遮谁的问题。

    覆盖,是指派生类函数覆盖基类函数,只作用于派生类函数,其特性为:

(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual关键字。

我们发现,这里用到了虚函数,实际上虚函数的作用,就是实现覆盖。

    隐藏,是指派生累函数将基类函数给藏起来了,当然只作用于派生类函数,其特性与覆盖不同。

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。

 

还有一点要切忌,对于static这种静态成员函数,是属于类的方法,而不是对象的方法,所以static方法绝对不能被覆盖或者隐藏。

转载于:https://www.cnblogs.com/jiayouwyhit/p/3308844.html

你可能感兴趣的文章
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>
CentOS7 中把yum源更换成163源
查看>>
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>
【NOI 2018】归程(Kruskal重构树)
查看>>
注册用户
查看>>
TZC Intercommunication System
查看>>
HDU 4571 SPFA+DP
查看>>
centos 创建以日期为名的文件夹
查看>>
Java Timer触发定时器
查看>>
Page Object设计模式
查看>>
程序的基础知识
查看>>
在VIM中使用GDB调试 – 使用vimgdb
查看>>
python爬虫---从零开始(五)pyQuery库
查看>>
POJ2236(KB5-A)
查看>>
Centos MySQL数据库迁移详细步骤
查看>>