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

时间:2022-10-27 04:25:46

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

1.重载特征

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

2)函数名相同;

3)参数不同;

4)virtual关键字可有可无。

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.运行结果

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

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