Chinaunix首页 | 论坛 | 博客
  • 博客访问: 800835
  • 博文数量: 104
  • 博客积分: 915
  • 博客等级: 下士
  • 技术积分: 2171
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 21:34
文章分类

全部博文(104)

文章存档

2018年(4)

2015年(14)

2014年(9)

2013年(56)

2012年(21)

分类: C/C++

2012-06-21 09:19:50

  最近在学习过程中遇到了令人迷惑的隐藏!!!
顺便在总结一下:

成员函数重载的特征:
(1)相同的范围(在同一个类中)
(2)函数名字相同
(3)参数不同
(4)virtual关键字可有可无

覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类和基类)
(2)函数名字相同
(3)参数相同
(4)基类函数必须有virtual关键字

隐藏是指派生类的函数屏蔽了基类函数,规则:
(1)派生类函数与基类函数同名,参数不同。不论有无virtual关键字,基类函数被隐藏(与重载区分)
(2)派生类函数与基类函数同名,参数相同。基类函数没有virtual关键字,基类函数被隐藏(与覆盖区分)  

eg:
#include
using namespace std;

class Base
{
public:
virtual void f(float x) { cout<<"Base::f(float) "<
        void g(float x) { cout<<"Base::g(float) "<
        void h(float x) { cout<<"Base::h(int) "<
};
class Derived::public Base
{
public:
virtual void f(float x) { cout<<"Derived::f(float) "<}
        void g(int x) { cout<<"Derived::g(int) "<
        void h(float x) { cout<<"Derived::h(float) "<
};

如上:
(1)函数Derived::f(float)覆盖了函数Base::f(float)。
(2)函数Derived::g(int)隐藏了函数Base::g(float),而不是重载。
(3)函数Derived::h(float)隐藏了函数Base::h(float),而不是覆盖。
阅读(1322) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~