C++学习之重载、覆盖与隐藏
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.运行结果
原文链接:http://www.maiziedu.com/wiki/cplus/hide/