c++


基础

c++里面的关键字

image-20250801092733557

const修饰指针有几种情况

  1. const int *p = &a; 表明值不能修改,但是指向可以
  2. int * const p = &a;表明值可以修改,但是指向不行
  3. 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;
image-20250801154025421

还有常量引用,用于修饰形参防止误操作

函数

c++函数重载不用 override函数

类和对象

三大特征 封装 继承 多态

构造和析构函数 在 public作用域当中

image-20250802093121429
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()
image-20250802150709183

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(){
}
}
image-20250803084636556

通过子类访问父类的东西的话需要加作用域

比如说是 Son.Base::m_A

包括 静态的成员或者函数的话 Son::Base::func(00)

多继承 使用,分割

virtual作为虚继承的作用,作为解决菱形多继承的问题

class Sheep :virtual public Animal{};

多态

virtual

作为虚函数的使用 ,关键在与传入的是 指针 Animal &animal

image-20250803094545440

利用虚析构可以解决 父类指针释放子类对象时不干净的问题

纯虚析构既需要声明也需要实现

文件操作

头文件

文件类型分为两种: 1. 文本文件-文件以文本的ASCII码形式存储在计算机中 2. 二进制文件·文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

# include<fstream>
ofstream ofs;
ofs.open("wenjianluj",打开方式);
ofs<<"写入的数据";

ofs.close();
image-20250803103440235

char buf[1024]={0};

ifs.getline(buf, sizeof(buf))

is_open

image-20250803104248697

模版

泛型编程和STL

建立同样模具,函数模版和类模版,和java中的泛型相同,作为函数不同类型的输入

template

记住什么呢 作用域和定义的处理 Person<T1, T2>::Person(T1 name, T2 age)

分文件编写

![image-20250804100254285]image-20250804100254285.png)

STL

长久以来,软件界一直希望建立一种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的一套标准,诞生了STL

STL作为标准模版库,分为 容器 算法 迭代器

容器和算法之间通过迭代器进行无缝连接。 STL 几乎所有的代码都采用了模板类或者模板函数

image-20250804103351196

vector

算法 for_each

迭代器 vector::iterator

#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和元素长度
image-20250804155946282

deque

双端数组,push_front push_back pop_front pop_back insert

image-20250804161751472

排序 sort(begin,end)

stack

stack stk;

queue

先进先出的数据结构

push pop back front

List

链表


文章作者: 绯霞盛歌
文章链接: http://suojifeng.xyz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 绯霞盛歌 !
  目录