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是多个变量共用一个内存空间
相关推荐
装不满的克莱因瓶10 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗17 分钟前
常用类晨考day15
java
骇客野人21 分钟前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
yuanbenshidiaos1 小时前
c++---------数据类型
java·jvm·c++
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎
数据的世界012 小时前
.NET开发人员学习书籍推荐
学习·.net
Lojarro2 小时前
【Spring】Spring框架之-AOP
java·mysql·spring
莫名其妙小饼干2 小时前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
四口鲸鱼爱吃盐2 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
十年一梦实验室2 小时前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵