【针对性复习】C/C++(暂未完成)

本文深入探讨了C++中的数组、函数调用、面向过程与面向对象编程的区别、命名空间、缺省参数、函数重载等核心概念。解析了内联函数与宏函数的优缺点,介绍了类和对象的封装、构造与析构机制,以及static和const成员的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不是大佬,还想拿offer,除了学习,你别无选择


数组

  • 概念
    • 相同类型元素的一段连续空间
  • 分类
    • 一维数组、多维数组
  • 初始化
    • int array[]={1,2,3};
    • int array[]={0};
    • int array[10]={1,2,3};
  • 特性
    • 数组名单独出现,隐式转换为指针,指向首元素地址
    • sizeof(数组名),求的是整个数组的大小
    • &数组名,指向整个数组,++之后指向末尾元素下一个位置
  • 用途
    • TODO

函数调用过程(TODO)

  • 压栈
    • 从右往左(规定)
    • push &b
    • push &a
    • call swap
      • 将call swap下一条指令的地址压栈
      • 执行jmp跳转

面向过程和面向对象的区别(TODO)

  • 面向过程
    • C语言想清楚流程,通过流程来编程
  • 面向对象
    • TODO

命名空间(TODO)

  • 作用
    • 解决命名冲突
  • 定义
    • namespace+命名空间名字+{}
      • 多个同名的命名空间
      • 命名空间的嵌套

缺省参数

  • 定义
    • 声明或定义一个函数,参数设置一个默认值,在函数调用期间,如果没有传递实参,就采用默认值,否则采用传递的实参
  • 分类
    • 全缺省
      • 全部参数都有默认值
    • 半缺省
      • 部分参数有默认值,只能从右往左依次提供,不能间隔

函数重载

  • 概念
    • 同一作用域中,具有多个同名函数,参数列表(参数个数、参数类型、顺序)必须不同
    • 与函数返回值无关
    • 与变量的属性是否不同无关
  • 调用原理
    • 编译阶段,自动检测实参的类型,根据推演的实际结果选择调用
      • 找到对应的函数,直接调用
      • 没找到完全匹配的类型
        • 尝试进行隐式类型转换,成功就调用
        • 转换类型不成功,崩溃
  • 函数名修饰规则
    • C语言仅仅在函数名前加上_,比如_Add
    • 将类型编译到底层使用的函数名字中,比如?+函数名+@@+YAHHH@Z
  • extern C
    • 按照C语言风格来编译函数

引用

  • 概念
    • 引用就是别名,定义中没有自己的底层空间,和引用的实体公用同一块内存空间,但是底层实现按照指针方式,其实有自己的底层空间
  • 特性
    • 引用在定义时必须初始化
    • 一个变量可以有多个引用
    • 引用一旦引用一个实体,就不能引用其他实体
  • 使用场景
    • 引用形参
      • 通过形参改变外部实参,普通类型引用
      • 不想通过形参改变外部实参,const类型引用
    • 做返回值
      • 不能返回栈上的空间
      • 返回值的生命周期不受函数周期
  • 传值效率
    • 传值或返回值,传递或返回都是实参的一份临时拷贝,所以效率低下
    • 传引用,和指针效率几乎一样高
    • T&—>T* const,const左值右向,表示指向不可以被修改
    • const T&—>const T* const

内联函数和宏函数

  • 宏函数
    • 优点
      • 预处理阶段,预处理器会将宏函数展开,少了函数调用过程开销,提高程序运行效率
    • 缺陷
      • 不是真正的函数,预处理阶段展开,因此不参与编译,安全性不高(没有参数类型检测)
      • 不方便debug调试
      • 每个模块都需要()
    • 副作用
      • #define MAX(a,b) (a)>(b)?(a):(b);
      • MAX(++a,b),a会被加两次
      • 代码膨胀
  • 内联函数
    • 概念
      • 被inline关键字修饰的函数,或成员函数放在类中定义
    • 适用场景
      • 代码不长
      • 函数内没有循环或递归
    • 优点
      • 在编译阶段,编译器会将内联函数展开,少了函数调用开销,提高程序运行效率
      • 是真正的函数,要参与编译,有参数类型检测,代码安全性较高
      • debug模式下,编译器不会将内联函数展开(方便调试)
      • 无副作用MAX(++a,b)
    • 缺陷
      • 代码膨胀

宏常量—>const类型的常量:编译阶段,直接替换

类和对象

  • 什么是封装?(封装的概念)
    • 将事物的内部细节隐藏,必须向外提供一些公有的接口让对象之间的交互
    • 火车站,购票
    • 制作手机,手机使用
  • 封装的实现
      • 将对象的属性和操作的方法包装在一起
    • 访问权限
      • 通过访问权限选择性的将方法提供给外部使用
  • class和struct的区别
    • class的默认权限为private
    • struct的默认访问权限为public
    • 模板中可以用class T,不可以使用struct T
  • this指针
    • 类类型* const
    • 特性
      • TODO
  • 空类的大小
    • 主流编译器给的是1
    • 给1个字节标识这个类

类中6个默认的成员函数(TODO)

  • 构造函数
    • 概念
      • 一个特殊的成员函数,在创建对象时由编译器自动调用,完成对象的初始化工作
    • 特性
      • 函数名与类名相同,没有返回值类型
      • 创建对象时由编译器自动调用,在对象的生命周期内只调用一次
      • 具有初始化列表
        • 初始化类中的非静态成员变量
        • 成员在初始化列表只能出现一次(初始化只能初始化一次
        • 与初始化列表次序无关,按照在类中的声明次序初始化
    • 缺省构造函数
      • 无参构造和全缺省构造,只能存在一个
    • 注意
      • 不能使用static和const修饰,不能是虚函数
    • 作用
      • 构造和初始化对象
      • 单参构造函数,具有类型转化的作用,禁止使用explicit
    • 调用场景
      • 创建对象时由编译器自动调用,在对象的生命周期内只调用一次
  • 析构函数
    • TODO
  • 拷贝构造函数
    • 如果没有显示定义,会默认生成,按照浅拷贝的方式
  • 赋值运算符重载
    • TODO
  • static成员
    • C语言使用方式
      • static+全局变量
        • 文件作用域
      • static+局部变量
        • 延长生命周期
        • 存放在哪个位置?TODO
      • static+函数
        • 当前函数只能在当前文件里应用
    • C++使用方式
      • static+成员变量
        • 类中只是声明,必须在类外初始化
        • 是类的属性,不属于某个具体的对象
        • 是所有类对象共享的一个成员变量
        • 不会影响sizeof的结果
        • 访问方式
          • 通过对象访问
          • 类名::访问
      • static+成员函数
        • 本质
          • 静态成员函数,没有隐藏的this指针
        • 调用
          • 通过对象+.调用
          • 通过类名::静态成员函数名调用
        • 注意
          • 静态成员函数不能访问非静态的成员变量(因为没有this指针)
          • 也不能访问非静态的成员函数
          • 静态成员函数不能使用const修饰
          • 静态成员函数不能为虚函数(虚函数需要this找虚表才能调用)
  • const成员
    • C语言使用方式
      • const只能修饰变量,代表变量不能被修改
    • C++使用方式
      • const+变量
        • 将变量看做常量,且具有替换的作用
        • 看到此变量,直接用常量替换
      • const+成员变量
        • 表示该成员变量不可以在成员函数内部被修改
        • 必须在构造函数初始化列表位置初始化
      • const+成员函数
        • 修饰的成员函数中隐藏的this指针
        • 代表该成员函数中不能修改类中的非静态成员变量
        • 除非该成员被mutable的关键字修饰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值