C++学习之重载、覆盖与隐藏

本文详细介绍了C++中的重载、覆盖与隐藏的概念及其区别。通过具体示例讲解了函数重载的要求,如在同一类中具有相同名称但参数不同;覆盖则涉及派生类对基类虚函数的重新实现;并解释了隐藏现象发生的条件。

MaiziTest12.cpp : 定义控制台应用程序的入口点。

 

1.重载特征

 

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

 

2)函数名相同;

 

3)参数不同;

 

4virtual关键字可有可无。

 

2.覆盖

 

指的是派生类的成员函数覆盖基类中的同名函数。

 

要求:两个函数的参数个数和类型都相同,基类函数必须是虚函数。

 

特征:

 

1)不同的范围(分别位于派生类和基类);

 

2)函数名字相同;

 

3)参数相同;

 

4)基类函数必须有virtual关键字。

 

3.隐藏

 

派生类中的函数与基类中的函数参数相同时,但是基类函数不是虚函数。

 

派生类中的函数与基类中的函数参数不同时,不管基类函数是否是虚函数,基类函数都会被屏蔽。

 

特征:

 

1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类函数都将被隐藏;

 

2)派生类中的函数与基类中的函数参数相同时,但是基类函数不是虚函数(没有virtual关键字)。基类函数将被隐藏。

 

4.代码

 

#include "stdafx.h"

#include<iostream>

using namespace std;

//重载

/*

class A

{

//重载关系的3个函数

//.....................................

 int fun();

void fun(int);

void fun(double,double);

//....................................

}

*/

//覆盖

/*

class A

{

//............................

virtual void fun1(int,int);

virtual int fun2(char *);

//...........................

};

class B:public A

{

//.....

void fun1(int,int);

//.....

};

class C:public B

{

//....

int fun2(char *);

 

//...

};

*/

//隐藏

class A

{

public:

void fun(int xp)

{

cout<<xp<<endl;

}

};

class B:public A

{

public:

void fun(char *s)

{

cout<<s<<endl;

}

void fun(int xp)

{

A::fun(xp);

}

};

int _tmain(int argc, _TCHAR* argv[])

{

B obB;

obB.fun("hello");

obB.fun(2);

/*

A *pA = new C;

pA->fun1();

pA->fun2();

*/

return 0;

}

 

5.运行结果

 

 

原文链接:http://www.maiziedu.com/wiki/cplus/hide/

 

转载于:https://www.cnblogs.com/maizi008/p/5978320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值