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++:编译器将函数参数的类型放置在函数名字中,来保证函数重载时名字在底层的不同

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

    • 候选函数集识别:编译器会先找出所有同名函数,这些函数被称为候选函数
    • 可行函数筛选:从候选函数中筛选出参数数量和类型都合适的可行函数
    • 最佳匹配选择:依据实参与形参的匹配程度,从可行函数中选出最佳匹配的函数
    • 错误检查:如果找不到匹配的函数,或者有多个同等匹配的函数,编译器就会报错
相关推荐
xlp666hub19 小时前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网20 小时前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
xlp666hub1 天前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
不想写代码的星星1 天前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++
xlp666hub2 天前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
不想写代码的星星2 天前
C++继承、组合、聚合:选错了是屎山,选对了是神器
c++
不想写代码的星星3 天前
std::function 详解:用法、原理与现代 C++ 最佳实践
c++
樱木Plus5 天前
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
c++
blasit7 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
肆忆_8 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++