您的位置:首页 > 编程语言 > C语言/C++

c++快速简易入门教程_008函数的覆盖和隐藏

2016-04-11 17:56 225 查看
这一节我们来学习函数的覆盖和隐藏的问题,这一节内容不是很难,但是一定要弄清楚,因为很重要!先上代码思考一下:

#include <iostream>

using namespace std;

class Base{

public:
virtual void xfn(int i){

cout << "Base::xfn(int i)" << endl;

}
void yfn(float f){

cout << "Base::yfn(float f)" << endl;

}
void zfn(){

cout << "Base::zfn()" << endl;

}
};

class SubClass :public Base{

public:
void xfn(int i){	//覆盖了基类的xfn函数

cout << "SubClass::xfn(int i)" << endl;

}
void yfn(int c){	//隐藏了基类的yfn函数

cout << "SubClass::yfn(int c)" << endl;

}
void zfn(){		//隐藏了基类的zfn函数

cout << "SubClass::zfn()" << endl;

}

};

void main(){

SubClass sub;

Base* pB = ⊂
SubClass *pSub = ⊂

pB->xfn(5);
pSub->xfn(5);

pB->yfn(3.14f);
pSub->yfn(3.14f);

pB->zfn();
pSub->zfn();

printf("hello...\n");
system("pause");
return;
}
运行结果:

SubClass::xfn(int i)
SubClass::xfn(int i)
Base::yfn(float f)
SubClass::yfn(int c)
Base::zfn()
SubClass::zfn()
hello...
请按任意键继续. . .
解析:

1 函数的覆盖

构成函数覆盖的条件:

(1)基类函数必须是虚函数(使用virtual关键字进行声明)

(2)发生覆盖的两个函数分别位于派生类和基类中

(3)函数名称和参数列表必须完全相同

2 函数的隐藏

所谓隐藏是指派生类中具有与基类同名的函数(不考虑参数列表是否相同),从而在派生类中隐藏了基类的同名函数。对于初学者很容易把函数的隐藏与函数的覆盖、重载相混淆,我们看下面两种函数隐藏的情况:

(1)派生类的函数与基类的函数完全相同(函数名和参数列表都相同),只是基类的函数没有使用virtual关键字。此时基类的函数将被隐藏,而不是覆盖。

(2)派生类的函数与基类的函数同名,但参数列表不同,这种情况下,不管基类的函数声明是否具有virtual关键字,基类的函数都将被隐藏。注意这种情况与函数重载的区别,重载发生在同一个类中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: