C++学习

一、记简单语法

  • C++标准库提供了一系列有用的功能和类,为了避免与用户自定义的类型或函数名冲突,标准库中的大多数内容都被放置在一个名为std的命名空间中。
  • 单引号内部有且仅有只能提供一个字符,双引号内部提供字符的数量不限
  • 符号常量(#define,结尾不需要分号)与常变量(const),前者的值在其作用域内是不能改变的,也不能被赋值,后者在定义常变量时必须同时对它初始化,此后它的值不能再改变。
    • 区别:常变量与符号常量的区别:符号常量不占用内存空间,在预编译时就全部由符号常量的值替换了,而常变量占用内存空间,只是此变量在存在期间不能重新赋值。
  • 预处理操作有#include(运行原理为直接复制原来的c++ text内容到本文件中),#if,#define
  • static的不同含义
    • 在修饰局部变量时,使得该变量不会因为函数终止而丢失,使其生命周期为整个源程序。
    • 把全局变量改变为静态变量后限制了它的使用范围(仅在本域内使用)
    • 可以将变量默认初始化为0
    • 类中的static------静态成员函数和静态成员变量属于类,不属于类的实体,无论实例化多少个改变量函数只有一个。
      • 静态成员函数只能访问静态成员变量和函数,不能访问其他变量;非静态函数可以访问非静态与静态函数与变量
      • 静态成员变量必须在class外声明静态变量并初始化
  • inline内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。内联函数通常就是将它在程序中的每个调用点上"内联地"展开。
  • 枚举类型是一种派生数据类型,它是由用户定义的若干枚举常量的集合。默认值从0开始,枚举变量的值只能取枚举常量表中所列的值,就是整型数的一个子集。
    • 枚举变量可以直接输出,但不能直接输入。
    • 不能直接将常量赋给枚举变量。
  • 类的构造函数类似于类初始化(只在实例化时自动执行),一个类内可以有多个构造函数(函数重构)。也可以使用成员初始化列表进行初始化(列表须按照变量声明的顺序初始化)
  • 类的析构函数是构造函数的反面,当类被销毁是该方法会被触发
  • 类的继承:基类可以被继承为 public、protected 或 private 几种类型
    • 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问
    • 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员
    • 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员
  • 类的虚函数virtual及override实现了C++多态(polymorphism),虚函数允许子类重新定义父类成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。
  • 类的纯虚函数就是类的接口,这个接口必须在后面的继承中被实现
  • 创建对象 new 和不 new 的区别
    • 作用域不同。
      • 不用new:作用域限制在定义类对象的方法中,当方法结束时,类对象也被系统释放了,(安全不会造成内存系统泄漏)。
      • 用new:创建的是指向类对象的指针,作用域变成了全局,当程序结束时,必须用delete删除,系统不会自动释放,(不注意可能造成内存泄漏)。
    • 不用new的是一个类对象,用new的是一个是指向类对象的指针。
  • mutable允许常量方法(不能是函数)可以修改变量
  • 在C++中,如果在if块或for块中声明变量,它们的作用域仅限于该块内。一旦控制流离开了这个块,这些变量就会离开其作用域并被销毁。
  • new在堆中生成变量并返回变量的指针(生存周期更长),需要delete手动删除
  • 智能指针可以自动释放堆上面申请的变量,而不显性的使用delete操作符
    • unique_ptr(作用域指针):当离开当前作用域,堆上变量将自动释放,且不能复制
    • shared_ptr(共享指针):只用当所有的共享堆上变量的指针释放,该堆上变量才会释放。内涵引用计数(即引用当前堆上变量指针的个数)
    • weak_ptr(虚指针):类似于shared_ptr,但不会触发没有引用计数
  • 赋值运算符=总是新开辟一块空间(浅拷贝)
  • 友元函数将目标函数标记为自己人,允许访问类中的私有变量
  • template定义的函数不是真正的函数,只有当模版被调用时才会根据调用的内容创建函数,只不过调用模版时需要指定输入类型
  • auto可以自动推到出被变量或函数返回值的类型
  • union是多个变量共用一个内存空间
相关推荐
普兰店拉马努金18 分钟前
【高中数学/古典概率】4红2黑六选二,求取出两次都是红球的概率
java·概率
智商低情商凑18 分钟前
CAS(Compare And Swap)
java·jvm·面试
yangmf204019 分钟前
使用 Logstash 迁移 MongoDB 数据到 Easysearch
java·elasticsearch·搜索引擎
Tiger_shl22 分钟前
【Python语言基础】24、并发编程
java·数据库·python
FAQEW25 分钟前
Spring boot 中的IOC容器对Bean的管理
java·spring boot·后端·bean·ioc容器
05091531 分钟前
测试基础笔记第十一天
java·数据库·笔记
IDRSolutions_CN1 小时前
如何将 PDF 中的文本提取为 JSON 格式
java·经验分享·pdf·软件工程·团队开发
摘星编程1 小时前
并发设计模式实战系列(6):读写锁
java·设计模式·并发编程
吴_知遇1 小时前
【华为OD机试真题】428、连续字母长度 | 机试真题+思路参考+代码解析(E卷)(C++)
开发语言·c++·华为od
Java中文社群2 小时前
最火向量数据库Milvus安装使用一条龙!
java·人工智能·后端