• 类中成员函数重载、隐藏、覆盖


    重载:不一定非要发生在类中。同一作用域的同名函数,参数列表不同,都有可能是重载函数

    运算符重载:同一运算符对不同类型对象的操作

    函数重载:同一函数名,用不同类型的参数加以区分

    类中成员函数的 重载、覆盖和隐藏

    成员函数重载特征:

    1)具有相同的作用域(即在同一个类的作用域中)

    2)函数名字相同

    3)参数列表不同,包括参数类型、顺序或数目

    4)virtual关键字可有可无(不用考虑是否有virtual关键字)

    覆盖是指派生类重新实现(或者改写了)基类的成员函数,其特征是:

    1)不同的作用域(一个在派生类一个在基类)

    2)基类函数必须是虚函数

    3)函数名称,参数列表必须完全相同

    隐藏是指派生类的成员函数遮蔽了与其同名的基类的同名函数,具体规则如下:

    1)派生类成员函数与基类成员函数同名,但参数列表有所差异。此时,不论有误virtual,基类的成员函数在派生类中都被隐藏。

    2)派生类成员函数与基类成员函数同名,参数列表也完全相同。此时基类的成员函数中没有virtual关键字,基类中的函数在派生类中被隐藏。

    实例:

    #include <iostream>
    using namespace std;
    class Base
    {
    public:
    virtual void f(float x) {cout<<"Base::f(float)"<<x<<endl;}
    void g(float x) {cout<<"Base::g(float)"<<x<<endl;}
    void h(float x) {cout<<"Base::h(float)"<<x<<endl;}

    };

    class Derived : public Base
    {
    public:
    virtual void f(float x) {cout<<"Derived::f(float)"<<x<<endl;}
    void g(int x) {cout<<"Derived::g(float)"<<x<<endl;}
    void h(float x) {cout<<"Derived::h(float)"<<x<<endl;}
    };
    int main()
    {
    Derived d;
    Base* pb = &d;
    Derived* pd = &d;
    //virtual 动态绑定。程序的行为仅依赖于对象的真实类型
    pb->f(3.14f);
    pd->f(3.14f);

    ////隐藏规则1

    pb->g(3.14f);
    pd->g(3.14f);

    ////隐藏规则2

    pb->h(3.14f);
    pd->h(3.14f);

    return 0;
    }

    博客内容只为本人学习所感转载亦或自写,不足或错误之处请大家不吝赐教
  • 相关阅读:
    xUtils
    android各类开发框架汇总
    The connection to adb is down, and a severe error has occured.问题解决
    android系统自带主题和自定义主题
    gson处理json和java对象互转
    android解析json数据
    andrid源码目录分析
    JavaScript学习笔记(1)字符串方法
    0day学习笔记(3)Windows定位API引起的惨案(原理)
    内存分页
  • 原文地址:https://www.cnblogs.com/niupan369/p/4487729.html
Copyright © 2020-2023  润新知