谈C++继承中的重载、覆盖和隐藏

王朝c/c++·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

写正题之前,先给出几个要害字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),经常把重载(overload)和覆盖(override)搞错!

我们先来看一些代码及其编译结果。

实例一:

#include "stdafx.h"

#include

class CB

{

public:

void f(int)

{

cout

}

};

class CD : public CB

{

public:

void f(int,int)

{

cout

}

void test()

{

f(1);

}

};

int main(int argc, char* argv[])

{

return 0;

}

编译了一下

error C2660: 'f' : function does not take 1 parameters

结论:在类CD这个域中,没有f(int)这样的函数,基类中的void f(int)被隐藏

假如把派生CD中成员函数void f(int,int)的声明改成和基类中一样,即f(int),基类中的void f(int)还是一样被覆盖,此时编译不会出错,在函数中test调用的是CD中的f(int)

所以,在基类中的某些函数,假如没有virtral要害字,函数名是f(参数是什么我们不管),那么假如在派生类CD中也声明了某个f成员函数,那么在类CD域中,基类中所有的那些f都被隐藏。

假如你比较心急,想知道什么是隐藏,看文章最后的简单说明,不过我建议你还是一步一步看下去。

我们刚才说的是没有virtual的情况,假如有virtual的情况呢??

实例二:

#include "stdafx.h"

#include

class CB

{

public:

virtual void f(int)

{

cout

}

};

class CD : public CB

{

public:

void f(int)

{

cout

}

};

int main(int argc, char* argv[])

{

return 0;

}

这么写当然是没问题了,在这里我不多费口舌了,这是很简单的,多态,虚函数,然后什么指向基类的指针指向派生类对象阿,通过引用调用虚函数阿什么的,属性多的很咯,什么??你不明白??随便找本C++的书,对会讲多态和虚函数机制的哦!!

QQ病毒

腾讯QQ空间代码专题

PPT教程专题

ADSL应用面面俱到

Fireworks教程专题

计算机和网络技术基础知识

校园网专题

网吧技术专题

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航