zoukankan      html  css  js  c++  java
  • 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);
    }

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

  • 相关阅读:
    NODE 开发 2-3年工作经验 掌握的相关知识
    react 问题
    vue 问题集合 |
    前端实用工具大全, 有任何棘手的实现, 可以来这里拿
    react 入门的好东西 可以做出一个完整的网站
    vue 问题集合
    js 预处理 与 执行 的顺序
    js_6_dom选择
    js_4_函数
    js_3_for_if_try
  • 原文地址:https://www.cnblogs.com/estival/p/3243183.html
Copyright © 2011-2022 走看看