随笔分类 -  c++基础与提高

摘要:主要是用来防止new之后忘了delete的,它负责自动释放所指向的对象,智能指针本质上也是一个类 动态内存管理经常会出现两种问题:一种是忘记释放内存,会造成内存泄漏;一种是尚有指针引用内存的情况下就释放了它,就会产生引用非法内存的指针。 标准库提供的两种智能指针的区别在于管理底层指针的方法不同,sh 阅读全文
posted @ 2023-01-23 19:30 纸包鱼 阅读(15) 评论(0) 推荐(0) 编辑
摘要:自定义类之间的类型转换是通过构建构造函数的多态来进行的 在对象刚刚定义时, 即使你使用的是赋值操作符=, 也是会调用构造函数, 而不是重载的operator=运算符. 1.用类型转换构造函数进行类型转换实现其它类型到本类类型的转化。转换构造函数格式class 目标类{ 目标类(const 源类 & 阅读全文
posted @ 2023-01-23 16:44 纸包鱼 阅读(105) 评论(0) 推荐(0) 编辑
摘要:运算符重载的本质是函数重载。 语法格式重载函数的一般格式如下:返值类型 operator 运算符名称(形参表列){ 重载实体;}operator 运算符名称 在一起构成了新的函数名。比如const Complex operator+(const Complex &c1,const Complex & 阅读全文
posted @ 2023-01-21 17:55 纸包鱼 阅读(212) 评论(0) 推荐(0) 编辑
摘要:指向类数据成员的指针定义<数据类型><类名>::*<指针名>赋值&初始化<数据类型><类名>::*<指针名>[=&<类名>::<非静态数据成员>]指向非静态数据成员的指针在定义时必须和类相关联,在使用时必须和具体的对象关联。解引用由于类不是运行时 存在的对象。因此,在使用这类指针时,需要首先指定类的 阅读全文
posted @ 2023-01-21 16:39 纸包鱼 阅读(142) 评论(0) 推荐(0) 编辑
摘要:函数指针基础:1. 获取函数的地址 2. 声明一个函数指针 3.使用函数指针来调用函数 获取函数指针: 函数的地址就是函数名,要将函数作为参数进行传递,必须传递函数名。 声明函数指针 声明指针时,必须指定指针指向的数据类型,同样,声明指向函数的指针时,必须指定指针指向的函数类型,这意味着声明应当指定 阅读全文
posted @ 2023-01-21 16:00 纸包鱼 阅读(61) 评论(0) 推荐(0) 编辑
摘要:const用处 常数据成员const修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化列表中赋值(c11中支持类中实始化)。可被const 和非const 成员函数调用,而不可以修改。 class A{public:A():iValue(199){}private:const int i 阅读全文
posted @ 2023-01-21 15:52 纸包鱼 阅读(70) 评论(0) 推荐(0) 编辑
摘要:return本是上是一个拷贝过程,不过是右值拷贝,也就是无标记变量的拷贝。 不管是返回指针还是返回值,return首先将要return的值存到eax寄存器中,回到父函数再将返回的值赋给变量 int A{return 0;} int main() { int i = A; } 其实是先将0放入eax寄 阅读全文
posted @ 2023-01-21 10:41 纸包鱼 阅读(407) 评论(0) 推荐(0) 编辑
摘要:sizeof(string)为32 因为本质上string属于类,类中的成员是char,类的大小就是类中成员变量(非静态)加上指向虚函数表的指针以及指向虚基类表的指针加起来的和。这里string类只有一个成员变量char *str;没有虚函数以及虚基类,所以sizeof(string)说直接点就是s 阅读全文
posted @ 2023-01-20 21:38 纸包鱼 阅读(87) 评论(0) 推荐(0) 编辑
摘要:名字空间: 名字空间有两个特征:1. 顺序 2.嵌套 顺序:编译器和解释器相当于一个翻译官,拿着本子一行一行读代码,只有见过的名字才会记到本子上,每见过的名字他就不认识(所以C++需要声明 ,python需要导入)。 嵌套:当翻译官进入一个新的名字空间时(花括号体),翻译官会在记这些名字时会用花括号 阅读全文
posted @ 2023-01-20 20:31 纸包鱼 阅读(53) 评论(0) 推荐(0) 编辑
摘要:局部变量,存储位置:栈,存储时间:变量所在程序运行时间 全局变量,存储位置:静态存储区,存储时间:程序运行时间 static 静态变量,存储位置:静态数据区,存储时间:第一次初始化到程序运行结束 new 手动分配,存储位置:堆区,存储时间:从new到delete c++存储空间共分为5个: 静态存储 阅读全文
posted @ 2023-01-20 17:44 纸包鱼 阅读(108) 评论(0) 推荐(0) 编辑
摘要:用来初始化一段堆内存,new的返回值为该段堆内存的首地址,有且仅有一个*,int*a为(int*)(a),int*代表变量指向内存为int的地址,所以a代表的是指向内存为int的地址的变量 int **a = new int[5][6];//不可执行 int **a = new int*[5];// 阅读全文
posted @ 2023-01-20 15:56 纸包鱼 阅读(49) 评论(0) 推荐(0) 编辑
摘要:1.c的类型转换 int a =1; float b = float(a); 2.静态类型转换 static_cast<目标类型> (标识符) int *p; void *q;p = static_cast<int*>(q) 3.reinterpret_cast<目标类型> (标识符通常为操作数的位 阅读全文
posted @ 2022-12-05 19:24 纸包鱼 阅读(31) 评论(0) 推荐(0) 编辑
摘要:利用成员函数实现运算符的重载 *在这里实现 ‘+’ 运算符和 ‘<<’ 运算符的重载。 值得注意的是,‘+’ 用全局函数或成员函数都能实现重载;但 ‘<<’ 只能用全局函数实现重载。 class Complex{ friend Complex operator +(Complex &c1 , Com 阅读全文
posted @ 2022-12-05 15:34 纸包鱼 阅读(153) 评论(0) 推荐(0) 编辑
摘要:c++ 完全兼容c语言,那就面临着,完全兼容c的类库。由.c文件的类库文件中函数名,并没有发生namemangling 行为,而我们在包含.c文件所对应的.h文件时,.h文件要发生name manling 行为,因而会发生在链接的时候的错误。C++为了避免上述错误的发生,重载了关键字 extern。 阅读全文
posted @ 2022-12-05 15:22 纸包鱼 阅读(25) 评论(0) 推荐(0) 编辑
摘要:左值引用:引用一个对象; 右值引用:就是必须绑定到右值的引用,C++11中右值引用可以实现“移动语义”,通过 && 获得右值引用。 int x = 6; // x是左值,6是右值 int &y = x; // 左值引用,y引用x int &z1 = x * 6; // 错误,x*6是一个右值 con 阅读全文
posted @ 2022-12-05 14:58 纸包鱼 阅读(57) 评论(0) 推荐(0) 编辑
摘要:可以通过使用 setprecision 操作符来控制显示浮点数值的有效数的数量。 必须包含头文件 iomanip 才能使用 setprecision cout << setprecision(5) << quotient << endl; cout << setprecision(4) << quo 阅读全文
posted @ 2022-08-04 14:20 纸包鱼 阅读(180) 评论(0) 推荐(0) 编辑
摘要:枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。 定义格式:枚举类型的定义格式为: enum <类型名> {<枚举常量表>}; 格式说明: 关键字enum——指明其后的标识符是一个枚举类型的名字。 枚举常量表——由枚举常量构成。 阅读全文
posted @ 2022-08-04 13:50 纸包鱼 阅读(59) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示