• 15.11重载解析与成员函数


    重载函数解析的三个步骤
    1.选择候选函数
    2.选择可行函数
    3.选择最佳匹配函数

    15.11.1重载成员函数的声明

    class myClass{
    public:
    void f(double);
    void f(char,char);
    };

    重载函数不能依据返回类型来判断,如
    void f();
    double f();
    重载函数可以包括静态与非静态的成员,如

    class myClass{
    public:
    void mf(double);
    static void mf(int *);
    };

    15.11.2候选函数

    class myClass{
    public:
    void mf(double);
    char mf(char,char='
    ');
    static void mf(int *);
    };
    int main(){
    myClass mc;
    int obj;
    mc.mf(obj);
    }

    则候选函数包括myClass类中声明的三个mf成员函数


    15.11.3可行函数
    可行函数是函数的实参的类型和它的函数参数类型之间存在隐式
    的类型转换。
    在上例中,
    mf(double)是可行性函数,可以把int类型的实参转换成类型
    double
    mf(char,char)也是可行性函数,可以把int型转换成char型
    这两个转换具有一样的优先级,所以存在二义性。

    class myClass{
    public:
    static void mf(int);
    char mf(char);
    };
    int main(){
    char obj;
    myClass::mf(obj);
    }

    在该调用中,mf(int)与mf(char)都是可行函数,但mf(char)是最
    佳匹配,但是类成员函数不能通过类直接调用,程序出错。


    如果是非静态成员具有const属性,如何调用呢?

    public myClass{
    public:
    static void mf(int*);
    void mf(double);
    void mf(int) const;
    };
    int main(){
    const myClass mc;
    double obj;
    mc.mf(obj); //实际调用mf(int)
    }

    三个mf都是可行函数,mf(double)精确匹配,mf(int)可以通过
    double转换成int型,但const对象只能调用const非静态成员函数
    ,所以mf(int)被调用


    const对象可以调用静态成员吗?

    class myClass{
    public:
    static void mf(int);
    char mf(char);
    };
    int main(){
    const myClass mc;
    int obj;
    mc.mf(obj);
    }

    静态成员函数只能访问该类的静态成员,所以类的实例访问静态
    成员函数是有效的

  • 相关阅读:
    售后返修管理软件流程设计图
    Easyui datagrid加载数据时默认全选的问题
    如何做好售后管理之售后返修品管理
    您需要售后返修管理软件的N个理由
    使用软件量化考核售后维修人员业绩?
    如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密!
    VS.Net开发必备,让您的代码自动收缩,如何实现!
    vs生成dll,却没有生成相应的lib
    c++、webServices、gsoap、tinyxml、iconv
    gsoap、c++。webservice的client。
  • 原文地址:https://www.cnblogs.com/estival/p/3243183.html
Copyright © 2020-2023  润新知