基础
c++里面的关键字

const修饰指针有几种情况
- const int *p = &a; 表明值不能修改,但是指向可以
- int * const p = &a;表明值可以修改,但是指向不行
- const int * const p = &a;都不能
结构体指针可以通过 -> 操作符来访问结构体中的成员
c++中使用new来开创数据,返回该数据对应的指针
int *a = new int(10);
c++中的引用
本质上是一个指针常量
给变量起别名 使用&符号,操作同一个地址
引用必须初始化,在初始化不可以改变
引用可以做函数参数,利用引用让形参修饰实参,修改实际大小,区分值传递和地址传递
int a = 10;
int &b = a;
b=20;
cout a = 20
void swap(int &num1, int &num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
与此同时 引用可以作为 函数返回值,累哦作为 静态变量作为左值
不要返回局部变量的引用
错误
int& test(){
int a=10;
return a;
}
int &ref = test();
正确 static int a = 10;

还有常量引用,用于修饰形参防止误操作
函数
c++函数重载不用 override函数
类和对象
三大特征 封装 继承 多态
构造和析构函数 在 public作用域当中

Person p1;无参
Person p1(10);有参
Person p1(p2);拷贝
赋初值
Person(int a, int b, int c): m_A(a), m_B(b),m_C(c)
int m_A, m_B,m_C
静态成员变量
在类中使用 static修饰,都可以进行改变
静态成员函数只能使用静态成员函数 同样也是加上static的关键字
Person::m_A
Person::func()

this指针指向被调用的成员函数所属的对象
本质为指针常量,指针的指向是不可以被修改的
void show() const 加上 mutable关键字可以修改
const Person p;常对象只能调用常函数
this指针是隐含每一个非静态成员函数内的一种指针this指针不需要定义,直接使用即可 当形参和成员变量同名时,可用this指针来区分 在类的非静态成员函数中返回对象本身,可使用return *this
this ->age = age
友元
生活中你的家有客厅(Public),有你的卧室(Private)客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去但是呢,你也可以允许你的好闺蜜好基友进去 在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术 友元的目的就是让一个函数或者类 访问另一个类中私有成员 友元的关键字为 friend 友元的三种实现 全局函数做友元 friend void goodplay(); 类做友元 friend class building; 成员函数做友元 friend GoodGay::visit();
继承
类的继承
class Java : Public(继承方式 public protected private) BasePage
{
public:
void conmten(){
}
}

通过子类访问父类的东西的话需要加作用域
比如说是 Son.Base::m_A
包括 静态的成员或者函数的话 Son::Base::func(00)
多继承 使用,分割
virtual作为虚继承的作用,作为解决菱形多继承的问题
class Sheep :virtual public Animal{};
多态
virtual
作为虚函数的使用 ,关键在与传入的是 指针 Animal &animal

利用虚析构可以解决 父类指针释放子类对象时不干净的问题
纯虚析构既需要声明也需要实现
文件操作
头文件
文件类型分为两种: 1. 文本文件-文件以文本的ASCII码形式存储在计算机中 2. 二进制文件·文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们
# include<fstream>
ofstream ofs;
ofs.open("wenjianluj",打开方式);
ofs<<"写入的数据";
ofs.close();

char buf[1024]={0};
ifs.getline(buf, sizeof(buf))
is_open

模版
泛型编程和STL
建立同样模具,函数模版和类模版,和java中的泛型相同,作为函数不同类型的输入
template
记住什么呢 作用域和定义的处理 Person<T1, T2>::Person(T1 name, T2 age)
分文件编写
![image-20250804100254285]image-20250804100254285.png)
STL
长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了STL
STL作为标准模版库,分为 容器 算法 迭代器
容器和算法之间通过迭代器进行无缝连接。 STL 几乎所有的代码都采用了模板类或者模板函数

vector
算法 for_each
迭代器 vector
#include<vector>
#include<a>
插入push_back
vector<int>::iterator itbegain = v.begin(); 指向第一个位置
vector<int>::iterator itend = v.end(); 指向最后一个的下一个位置
for_each(v.begin(),v.end(),print())
赋值问题
v3.assign(v1.begin(), v1.end())
empty() capacity() size() resize(int num )
front()返回第一个 back()
at(int idx) 返回索引的数据 或者直接使用数组[]
reserve(int len)预留len和元素长度

deque
双端数组,push_front push_back pop_front pop_back insert

排序 sort(begin,end)
stack
stack
queue
先进先出的数据结构
push pop back front
List
链表