• c++重载、覆盖和隐藏


           c++成员函数的重载、覆盖和隐藏很容易混淆,因此我们必须搞清楚这一点。

    1.重载

           重载特点:同一访问区域(同类)、函数名称相同、函数参数不同(不关心返回类型)、virtual关键字可有可无

           代码示例:

    class OverLoad
    {
    public:
        void test() {}
        void test(int i) {}
        void test(float i) {}
        void test(int i, float j) {}
    };

    2.覆盖

            覆盖是指派生类函数覆盖基类函数,特点是:不同访问区域(不同类)、函数名称相同 、参数相同、基类函数必须有virtual关键字

    3.隐藏

           隐藏规则:

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

           2) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。

    4.代码示例

    #include <iostream>
    using namespace std;
    
    class OverLoad
    {
    public:
        void test() {}
        void test(int i) {}
        void test(float i) {}
        void test(int i, float j) {}
    };
    
    class Base
    {
    public:
        virtual void A(int i) 
        {
            cout << "Base::A()" << endl;
        }
    
        void B(int i)
        {
            cout << "Base::B()" << endl;
        }
    
        void C(int i)
        {
            cout << "Base::C()" << endl;
        }
    
        void D()
        {
            cout << "Base::D()" << endl;
        }
    };
    
    class Derive : public Base
    {
    public:
        //覆盖父类的A  函数名、参数完全相同,且父类要有virtual,子类virtual可有可无
        virtual void A(int i)
        {
            cout << "Derive::A()" << endl;
        }
        
        //隐藏父类中的B 函数名、参数完全相同,父类无virtual
        void B(int i)
        {
            cout << "Derive::B()" << endl;
        }
    
        //隐藏父类中的C 函数名相同、参数不同,与virtual无关
        void C(char* str)
        {
            cout << "Derive::C()" << endl;
        }
    };
    
    int main()
    {
        Derive* d = new Derive;
        Base* b = d;
        //均调用父类中的A
        d->A(1);
        b->A(2);
        //分别调用自己的B
        d->B(1);
        b->B(1);
        //分别调用自己的C
        d->C("1");
        b->C(1);
        d->D();//未被隐藏可以调用D()
        //d->C(1);由于隐藏了父类中的void C(int i),所以不能再调用
    }

    image

  • 相关阅读:
    Linux学习第一天:SecureCRT连接Linux常见错误
    函数
    文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
    文件处理
    自定义函数
    三级菜单
    写一个循环,不断的问客户想买什么 ,当用户选择一个商品编号,就把对应的商品加入购物车 ,最终用户输入q退出时,答应购物车的商品
    9*9乘法表
    打印列表的每个元素和索引值
    names里面有3个2,返回第2个2的索引值
  • 原文地址:https://www.cnblogs.com/zhangbaochong/p/5599222.html
Copyright © 2020-2023  润新知