C++重点知识详解(命名空间,缺省参数,函数重载)

命名空间

  • 概念:命名空间是新定义的一个作用域,里面可以放函数,变量,定义类,主要作用是防止命名冲突

  • 实现:

    cpp 复制代码
    namespace _name
    {
        //成员1
        //成员2
        //...
    }

    可以嵌套使用

  • 成员使用:

    cpp 复制代码
    //1、使用时带域名
    域名::成员名
    
    //2、展开某个成员函数的域
    using 域名::成员名   //后续该成员在当前文件可直接使用
    
    //3、展开一整个域
    using namespace 域名;

缺省参数

  • 概念:是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则采用实参
  • 分类:
    • 全缺省参数:所有参数都带缺省值
    • 半缺省参数:部分参数带有缺省值(缺省值必须从右到左依次给出)
  • 注意事项
    • 1、半缺省参数只能从右往左依次给出,不能隔着给
    • 2、不能再声明和定义时同时给出 原因:两个位置如果给的不统一,编译器就不知道该用哪一个
    • 3、缺省参数必须是常用和全局变量,即在编译时要能够明确知道缺省值的内容
    • 4、C语言不支持

函数重载

  • 概念:相同的作用域,函数名相同,参数列表不同(参数列表不同的具体体现参数类型不同,个数不同,以及类型次序不同,与返回值类型无关)

  • 调用原理:函数名相同,编译器如何知道调那个函数?编译期间,编译器通过对实参类型进行推演,根据推演结果找对应的重载函数,如果存在且不会造成二义性则调用否则产出编译错误

    • 二义性产生原因:当有多个候选函数能通过不同的转换路径与调用实参匹配,且这些转换的优先级相同,编译器就无法确定哪一个函数是最佳匹配,二义性问题便由此产生
    cpp 复制代码
    #include <iostream>
    using namespace std;
    
    void func(int x) { cout << "int" << endl; }
    void func(double x) { cout << "double" << endl; }
    
    int main() {
        short s = 10;  // 错误:二义性,short可转换为int或double
        func(s);       // 编译错误:'func': 对重载函数的调用不明确
        return 0;
    }
  • 名字修饰规则:即编译器在编译时对函数名字的改写方式

    • C语言:在函数名字前增加下划线

    • C++:编译器将函数参数的类型放置在函数名字中,来保证函数重载时名字在底层的不同

  • 函数重载的调用是在编译期间 确定的,这一过程被称为静态绑定(或静态多态)。编译器通过以下步骤来确定调用哪个重载函数:

    • 候选函数集识别:编译器会先找出所有同名函数,这些函数被称为候选函数
    • 可行函数筛选:从候选函数中筛选出参数数量和类型都合适的可行函数
    • 最佳匹配选择:依据实参与形参的匹配程度,从可行函数中选出最佳匹配的函数
    • 错误检查:如果找不到匹配的函数,或者有多个同等匹配的函数,编译器就会报错
相关推荐
烟锁池塘柳010 分钟前
【已解决,亲测有效】解决使用Python Matplotlib库绘制图表中出现中文乱码(中文显示为框)的问题的方法
开发语言·python·matplotlib
周小码12 分钟前
llama-stack实战:Python构建Llama应用的可组合开发框架(8k星)
开发语言·python·llama
UrSpecial25 分钟前
Linux线程
linux·开发语言·c++
郝学胜-神的一滴25 分钟前
深入浅出 C++20:新特性与实践
开发语言·c++·程序人生·算法·c++20
汉克老师38 分钟前
第十四届蓝桥杯青少组C++选拔赛[2023.1.15]第二部分编程题(2 、寻宝石)
c++·蓝桥杯·蓝桥杯c++·c++蓝桥杯·蓝桥杯选拔赛
大锦终41 分钟前
【Linux】进程间通信
linux·运维·服务器·c++
闪电麦坤9544 分钟前
C/C++项目练习:命令行记账本
开发语言·c++
kyle~1 小时前
python---PyInstaller(将Python脚本打包为可执行文件)
开发语言·前端·python·qt
菜就多练,以前是以前,现在是现在1 小时前
Codeforces Round 1048 (Div. 2)
数据结构·c++·算法
User:你的影子1 小时前
WPF ItemsControl 绑定
开发语言·前端·javascript