关于C++类成员函数的重载、覆盖、躲藏与virtual关键字[VC/C++编程]
本文“关于C++类成员函数的重载、覆盖、躲藏与virtual关键字[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1. 重载、覆盖与躲藏
1).重载:成员函数具有以下的特点时发生"重载"
A.相同的范围(同一个类中)
B.函数的名字相同
C.参数范例差别(不能举行隐式范例转换)
D.Virtual关键字无关紧要
2).覆盖(也叫"担当"):指派生类函数覆盖基类函数,特点是:
A.差别的范围(辨别位于基类与派生类中)
B.函数名字相同
C.参数相同
D.基类函数必须有virtual关键字
3).躲藏:是指派生类的函数屏蔽了与其同名的基类函数,法则以下:
A.假如派生类的函数与基类的函数同名,但是参数差别,此时不管有没有virtual关键字,基类的函数都将被躲藏,注意别与重载混合)
B.假如派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时基类的函数被躲藏(注意别与覆盖混合)
2.看下面这个例子代码:
#include <iostream>
using std::cout;
using std::endl;
class Base
{
public:
virtual void f(float x){ cout << "Base::f(float) " << x << endl;}
void g(float x){ std::cout << "Base::g(float) " << x << std::endl;}
void h(float x){ std::cout << "Base::h(float) " << x <<std::endl;}
};
class Derived : public Base
{
public:
virtual void f(float x){ std::cout << "Derived::f(float) " << x << std::endl;}
void g(int x){ std::cout << "Derived::g(int) " << x << std::endl;}
void h(float x){ std::cout << "Derived::h(float) " << x << std::endl;}
};
void main(void)
{
Derived d;
Base *pb = &d;
Derived *pd = &d;
pb->f(3.14f);//Derived::f(float) 3.14
pd->f(3.14f);//Derived::f(float) 3.14
pb->g(3.14f);//Base::g(float) 3.14
pd->g(3.14f);//Derived::g(int) 3
pb->h(3.14f);//Base:h(float) 3.14
pd->h(3.14f);//Derived::h(float) 3.14
}
以上是“关于C++类成员函数的重载、覆盖、躲藏与virtual关键字[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |