zoukankan      html  css  js  c++  java
  • C++:重载

    重载

    函数签名是指函数的参数个数,参数类型以及参数的顺序。重载的定义是:在同一作用域内函数签名不同但函数名相同的函数互为重载

    // 以下几个函数互为重载
    void print();
    void print(int a);
    void print(double a, int b);
    void print(int a, double b);
    void print(string a, double b);
    

    参数的不同也可以是通过const区分的。

    // 以下两个函数同样形成函数重载
    void print(int &a);
    void print(const int &a);
    
    // 声明成员函数为const即指定this指针为const,同样可以构成重载
    class LiF {
    public:
        void print();
        void print() const;
    };
    

    函数的形参名不同或返回值类型不同并不构成重载,并且编译报错,因为这类函数被编译器识别为相同函数。

    // 重定义print,编译报错
    void print(int a);
    void print(int b);
    
    // 重定义print,编译报错
    void print(int a);
    int print(int a);
    

    重载是如何实现的

    在C++的编译期,编译器会根据参数列表对函数进行重命名,在函数名中按顺序加入参数类型以区分重载的函数。在函数调用时,则会根据实参类型逐个匹配重载的函数,失配则报错。也就是说,重载只是语法上的重载,重载的函数在编译后仍然是不同的函数。这也就解释了为什么只有函数签名不同的函数才能构成重载。在编译完成之后,函数的重载也就确定了。因此可以说,重载提供的多态性是静态的,或者说重载提供了编译期的多态性

  • 相关阅读:
    Python的传递引用
    kafka的ACK
    分布式事务
    Java中的锁
    docker笔记
    MySQL数据库优化
    Centos7使用yum命令安装Mysql5.6.X
    ubuntu16.04安装workbench
    ubuntu下IDEA配置tomcat报错Warning the selected directory is not a valid tomcat home
    ubuntu配置JDK
  • 原文地址:https://www.cnblogs.com/Li-F/p/11537313.html
Copyright © 2011-2022 走看看