C++ 隐藏 覆盖 重载

来源:互联网 发布:mac cockney为什么停产 编辑:程序博客网 时间:2024/06/05 05:15

1  重载

重载发生在一个类的内部(同一个类中),函数名字相同,参数不同,virtual关键字可有可无

#include "stdafx.h"#include<iostream>using namespace std;class Base{public:void show(){cout << "A::show" << endl;}void show(int a){cout << "A::show" << a << endl;}};int main(){Base *b = new Base;b->show();b->show(10);delete b;return 0;}

2  隐藏 

 隐藏是指派生类的函数屏蔽了与其同名的基类的成员函数

    如果派生类的函数与基类函数同名,参数不同,此时 无论有误virtual关键字,基类的函数都将被隐藏(不是重载)

   如果派生类的函数与基类同名,参数相同,但基类没有virtual关键字,此时基类的函数也将被隐藏 (不是覆盖)

   <pre name="code" class="cpp">class Base{public: void show(){cout << "Base::show" << endl;}};class A : public Base{public:void show(int  a){cout << "A::show" << endl;}};int main(){A *a = new  A();a->show();//因为a中的show(int a)会隐藏父类的show()因此 会报函数参数太少错误
        delete a;return 0;}

3 覆盖

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

#include "stdafx.h"#include<iostream>using namespace std;class Base{public: virtual void show(){cout << "Base::show" << endl;}};class A : public Base{public:void show(  ){cout << "A::show" << endl;}};int main(){Base *a = new  A();a->show();
        delete a;return 0;}



0 0
原创粉丝点击