美文网首页
C++学习之重载、覆盖与隐藏

C++学习之重载、覆盖与隐藏

作者: 随波逐流007 | 来源:发表于2016-10-19 18:24 被阅读19次

    MaiziTest12.cpp :定义控制台应用程序的入口点。

    1.重载特征

    1)相同的范围(在同一个类中);

    2)函数名相同;

    3)参数不同;

    4)virtual关键字可有可无。

    2.覆盖

    指的是派生类的成员函数覆盖基类中的同名函数。

    要求:两个函数的参数个数和类型都相同,基类函数必须是虚函数。

    特征:

    1)不同的范围(分别位于派生类和基类);

    2)函数名字相同;

    3)参数相同;

    4)基类函数必须有virtual关键字。

    3.隐藏

    派生类中的函数与基类中的函数参数相同时,但是基类函数不是虚函数。

    派生类中的函数与基类中的函数参数不同时,不管基类函数是否是虚函数,基类函数都会被屏蔽。

    特征:

    1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类函数都将被隐藏;

    2)派生类中的函数与基类中的函数参数相同时,但是基类函数不是虚函数(没有virtual关键字)。基类函数将被隐藏。

    4.代码

    #include "stdafx.h"

    #include

    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<

    }

    };

    class B:public A

    {

    public:

    void fun(char *s)

    {

    cout<

    }

    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/


    相关文章

      网友评论

          本文标题:C++学习之重载、覆盖与隐藏

          本文链接:https://www.haomeiwen.com/subject/jibxuttx.html