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/

 

posted @ 2016-10-19 18:28  小麦麦子  阅读(162)  评论(0编辑  收藏  举报