C++
文章平均质量分 53
Zx62365
机器人相关分享
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
13.泛型编程 STL技术
template<typename T> 声明一个模版,告诉编译器后面的代码中紧跟着的T是一个通用数据类型不要报错 template声明创建模版 typename表明后面的符号是一种数据类型 可用class代替。void myswap(T &a,T &b) 自动类型推导的情况下 声明了了模版则函数中必须指定T。巧用swap收缩内存 vector<int>(v).swap(v);通过区间构造容器 vector<int>v2(v1.begin(),v1.end());原创 2025-11-29 08:06:37 · 401 阅读 · 0 评论 -
12.C++编译相关
g++ -E test.cpp -o test.i -E是仅预处理 指定源文件 -o test.i是指定输出文件名 后面也一样。include_directories(/usr/include ./include) 向工程添加多个头文件搜索路径 相当于g++的-I。link_directories(/usr/lib ./lib) 向工程添加多个库文件搜索路径 相当于g++的-L。set(SRC a.cpp b.cpp) 显式定义变量SRC的值为 a.cpp b.cpp。原创 2025-11-29 07:42:56 · 297 阅读 · 0 评论 -
10.C++多态
cat类继承Animal类时 且两者都有自己的speak函数 子类调用这个全局函数的时候(子类与父类是同一个类型 所以能调用同一个全局函数)在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容,因此可将虚函数改为纯虚函数。实现:类名::~类名(){}多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时不会调用到子类的析构代码。抽象类的特点:无法实例化对象,子类必须重写抽象类中的纯虚函数,否则也属于抽象类。当子类重写父类的虚函数 子类中的虚函数表会替换成子类的虚函数地址。原创 2025-11-28 15:39:14 · 274 阅读 · 0 评论 -
9.C++继承
父类中私有成员属性是被编译器给隐藏了,因此是访问不到 但确实是被继承了(占了内存空间)横列为父类中的成员的权限 竖列为继承时的继承权限 表中表示继承后成员的属性情况。语法:class 子类:继承方式 父类1,继承方式 父类2,......保护 保护 保护 不可访问父类的成员。子类与父类出现同名的成员函数时,子类会隐藏父类中所有同名函数。访问父类同名成员-加作用域(父类中的重载也要加)通过对象访问 子类对象.父类::成员。通过类名访问 子类::父类::成员。原创 2025-11-28 15:38:43 · 382 阅读 · 0 评论 -
8.运算符重载 (也可发生函数重载)
不能利用成员函数重载 因为无法实现cout在左侧(类名一定在左侧 因为是类的成员函数 p.operator<<(cout) 简化: p<<cout)其中ostream是cout的类型 后面的变量名称可以自定义 因为是引用传入起的别名 起什么名不影响其原本的功能 引用传入是因为输出流唯一。即可cout<<p<<endl;通过自己写成员函数实现两个对象相加属性后返回新的对象(通过成员函数重载"+"号)使用:cout<<p;但是不能写成cout<<p<<endl;也可以通过全局函数重载"+"原创 2025-11-14 08:04:04 · 418 阅读 · 0 评论 -
7.类和对象
(此时若test这个成员函数中有成员变量 又因为this为NULL 会报错 有成员变量的最好加个this == NULL的判断提高代码的健壮性 其实就是防止在空指针访问成员函数的时候访问到有成员变量的成员函数)在类的非静态成员函数中返回对象本身可以使用 return *this 可连续调用(链式编程) P2.test().test().test();成员函数做友元 在想访问的类中加入 friend+带作用域的函数声明 friend void person::test();原创 2025-11-14 08:03:30 · 281 阅读 · 0 评论 -
6.C++拷贝
在释放内存的时候,其中一个指针清空且释放内存后,另一个还没释放的指针释放时又会重复释放一遍已经释放过的地址的内存就会使程序崩溃。如指针的浅拷贝会让两个指针指向同一片内存(即两者存放的是相同的内存地址)深拷贝:在堆区申请空间 进行拷贝 (用 new)浅拷贝会出现内存重复释放的问题。浅拷贝:简单的赋值操作。原创 2025-11-13 07:51:40 · 114 阅读 · 0 评论 -
4.C++引用
const int &a=c 但是将c强转int了相当于 const int temp = c;生成一个临时的整型常量 const int &a = temp;引用的类型必须和所引用的类型严格匹配,且不能与字面值或者某个表达式的计算结果绑定在一起,但是 “常量引用” 是例外(只要被引用的类型能够转换为常量引用的类型)主要用于函数形参防止误操作 与值传递一个效果 但是引用比值传递省空间(作返回值时也是如此 不会返回一个副本而是返回本就有的变量的别名)相当于int* const ref=&a;原创 2025-11-12 08:13:06 · 376 阅读 · 0 评论 -
3.指针常量和常量指针及结构体
通过结构体指针访问结构体变量中的数据 只能使用'->' 不能使用'.'cons int* const p3=&a 指向与值都不能修改。int * const p=&a 定义时必须初始化。指针的指向可以修改 p=&b √。指针指向的地址的值不可修改 *p=20 X。const 修饰常量(指针常量,指针类型的常量)const修饰指针(常量指针,指向常量的指针)*******结构体*******指向的地址的值可以修改。结构体可以嵌套结构体。原创 2025-11-12 08:12:19 · 196 阅读 · 0 评论 -
2.命名空间namespaces
在大括号内定义的变量、函数、类等就属于该命名空间 命名空间内部引用可以直接使用函数、变量名称无需加命名空间前缀。命名空间可以合并 即可以定义多个相同的namespace xx{} 其中的内容是合并的(相同作用域)将std以内的所有内容引入目前的命名空间 调用时就无需加std前缀了。C++中引入命名空间来解决命名冲突的问题 简单来说就是定义了一个范围。多文件时定义命名空间 在头文件中声明在源文件中实现。原创 2025-11-11 09:25:00 · 292 阅读 · 0 评论 -
1.代码存储区
堆区 由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 堆区先入后出 释放时先释放后指向的指针。栈区 由编辑器自动分配释放,存放函数的参数值,局部变量等(包括const修饰的)int *arr=new int[10] 这里的10是指数组长度用的是[]new 类型(初值) 返回值是一个地址 数组的话返回值就是首地址。不要返回局部变量的地址 局部执行完后会被释放 (有些编译器会暂时给你保留一次)用new在堆区中开辟数据 delete释放。原创 2025-11-11 09:23:48 · 181 阅读 · 0 评论
分享