![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
虽迟但到灬
一起快乐的努力
展开
-
C++中const关键字讲解
作用1.const 修饰成员变量,定义成 const 常量,相较于宏常量,可进行类型检查,节省内存空间,提高了效率。2.const 修饰函数参数,使得传递过来的函数参数的值不能改变。3.const 修饰成员函数,使得成员函数不能修改任何类型的成员变量(mutable 修饰的变量除外),也不能调用非 const 成员函数,因为非 const 成员函数可能会修改成员变量。在类中的用法const 成员变量:1.const 成员变量只能在类内声明、定义,在构造函数初始化列表中初始化。2.const 成原创 2022-02-12 20:00:22 · 730 阅读 · 0 评论 -
C++内存泄漏的几种情况
1.堆内存泄漏:new/mallc分配内存,未使用对应的delete/free回收2.系统资源泄漏, Bitmap, handle,socket等资源未释放3.没有将基类析构函数定义称为虚函数,(使用基类指针或者引用指向派生类对象时)派生类对象释放时将不能正确释放派生对象部分由于疏忽或错误导致的程序未能释放已经不再使用的内存。进一步解释:并非指内存从物理上消失,而是指程序在运行过程中,由于疏忽或错误而失去了对该内存的控制,从而造成了内存的浪费。常指堆内存泄漏,因为堆是动态分配的,而且是用户来控制原创 2022-02-11 09:48:52 · 1449 阅读 · 0 评论 -
makefile变量使用和规则分析
makefile中常用的命令makefile中变量的使用makefile的内容包含maekfile实例原创 2022-01-29 17:23:48 · 728 阅读 · 0 评论 -
linux上C++编译过程
一:哪些代码是在预处理的时候运行的:(1)include头文件(2)导入库(3)宏定义二:编译编译:是代码转成汇编语言三:汇编汇编:将汇编代码转换成二进制,注意:第二步和第三步可以简单理解为是对语法的检查。四:链接把多个中间生成de .o文件链接在一起,还有包括动态链接库so,生成一个可执行文件...原创 2022-01-28 21:26:46 · 959 阅读 · 0 评论 -
doxygen工具用法
在项目中我们的注释一般要这样原创 2022-01-28 19:47:05 · 519 阅读 · 0 评论 -
C++编码类定义的规则
构造函数的职责:1.构造函数中只进行那些没有实际意义的初始化就是非业务逻辑的初始化,尽量在init()方法集中进行业务逻辑数据。2.构造体和类仅当只有数据时使用struct,其他一概使用class。类和结构体的成员变量使用不同的明明规则。3.继承优先使用组合,如果必须使用继承的话,只使用public继承。struct默认是public,class默认是private4.多重继承尽量不用,如果必须要用,多重继承中只有一个基类是有实现的,其他的都只能是 接口类,不然内部对象空间分配会有问题。5原创 2022-01-28 16:48:29 · 462 阅读 · 0 评论 -
C++编码规则
头文件规则:通常,每一个cpp文件对应一个h文件,当然也有特例,main函数入口cpp没有对应的h,只有纯虚函数的接口类只有h没有cpp。(1)防止重复包含:#ifndef#define#else注意:是在一个cpp中不会被多次引用,也就是说可以在一个cpp中多次inlcude一个头文件,所以不要在里面定义全局变量。(2)减少头文件的依赖(3)头文件中不导入命名空间...原创 2022-01-27 22:10:41 · 1926 阅读 · 0 评论 -
C程序中如何区分windowsx86,x64
1.理清一个概念:windows x86指32位cpuwindows x64指64位cpu2.如下代码:#include <iostream>//要引用C语言函数extern "C" { #include <libavcodec/avcodec.h>}//预处理指令来导入库#pragma comment(lib,"avcodec.lib") using namespace std;int main(int argc,char *argv[]){ //原创 2021-12-16 20:01:19 · 2347 阅读 · 0 评论 -
STL常见算法transform以及二分查找,以及lambda表达式
下面主要讲下transformtransform主要是如下作用:实现对两个数组的元素,依次对其进行操作,将其结果放入两外一个数组中。注意:上图第三个参数是第二个数组的首元素。lambda表达式,可以在这里简单的匿名函数,省去了繁杂的声明,调用等过程。如下代码:#include <iostream>#include <functional>#include <numeric>#include <algorithm>using namespac原创 2021-11-26 11:26:32 · 285 阅读 · 0 评论 -
C++适配器模式
·适配器将一个类接口转换为客户端期望的另一个接口·使用适配器可以防止类由于接口不兼容而一起工作·适配器模式的动机是,如果更改接口,可以实现软件的重用如下例子:我们为了实现某个类接口的重复使用,我们仅仅是更改了接口的名称。但是希望原来的接口以及实现不进行更改直接拿来用。看如下例子;#include <iostream>using namespace std;class rectangle{public: rectangle(double x1, double y1, dou原创 2021-11-25 16:53:42 · 253 阅读 · 0 评论 -
C++深拷贝与浅拷贝以及写时复制
深拷贝和浅拷贝的优缺点看了深拷贝,浅拷贝优缺点,我们知道浅拷贝效率高,但涉及到指针引用等会涉及到指针的多次释放导致悬挂指针。深拷贝,不会造成指针悬挂的问题,但会浪费空间以及效率较低的问题。下面看下用到浅拷贝的情况:#include <iostream>using namespace std;class A{public: A(int _data) : data(_data) {} A() {} int getdata() { return data; }pri原创 2021-11-24 15:00:30 · 366 阅读 · 0 评论 -
C++文件操作
对于文件操作,要做如下操作。1.打开文件用于读和写open2.检查打开是否成功fail3.读或者写read,write4.检查是否读完 EFOF5.使用完文件后关闭文件close如下例子:#include <iostream>#include <fstream>using namespace std;int main(){ int a; int index = 0; fstream fout("test.txt"); while (cin >原创 2021-11-23 18:32:09 · 248 阅读 · 0 评论 -
C++输入输出流重载
C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。您可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。下面的实例演示了如何重载提取运算符 >> 和插入运算符 <<。实例#include using namespace std;class Distance{private:int fee转载 2021-11-23 17:44:46 · 1560 阅读 · 0 评论 -
C++重载操作符详解
在C++中有很多的基本运算符,如+,-,*,/,==,>,<等等。这些基本的运算符对于基本的数据类型可以直接拿来使用。那么,涉及到我们自定义的数据类型,比如某些实际开发中的class的时候,如果想要实现这些基本的元素符操作,可能我们需要根据实际情况来进行操作符重载方可进行使用。一:如下例子判断连个对象是否相等,比如比较两个人是否同岁。如下代码:#include <iostream>using namespace std;class person{public:原创 2021-11-22 14:51:43 · 1920 阅读 · 0 评论 -
函数指针与指针函数
**函数指针:**每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。一般形式:一般类型(*指针变量名)(参数表)举例:int(*p)(int)·注意:与返回指针的函数之间的区别int(*p)(int)是指针:指向一个函数入口地址int *p(int)是函数:函数的返回值是一个int类型指针指针函数:int *p(int)是函数:函数的返回值是一个int类型指针下面请看实例代码://// main.cpp// pointertofunc////原创 2021-11-20 14:25:28 · 320 阅读 · 0 评论 -
C++中public,protected,private的区别
C++中public,protected,private个人总结为两种概念,一个宗旨。两种概念:概念一:静态的在C++中一个类的成员的访问级别可分为public,protected,和private。public的访问级别最低,谁都可以访问。一个类的public成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问protected访问级别中等,一个类的protected成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类的友元函数、友元类进行访问。private访问级别最高原创 2021-11-08 16:11:44 · 3353 阅读 · 0 评论 -
typedef修饰struct用法详解
typedef 修饰 struct ,因为在C和C++中struct中意义不完全一样,所以我们分两块姜,在C中typedef修饰struct和C++中typedef修饰struct。一:C中typedef修饰struct在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)这里的St原创 2021-11-08 14:57:36 · 4212 阅读 · 1 评论 -
shared_ptr,weak_ptr使用最广范的智能指针
一:shared_ptr基本概念:shared_ptr通过一个饮用计数,共享一个对象,shared_ptr为了解决unique_ptr在对象所有权上的局限性,在使用引用计数的机制上提供了可以共享对象所有权的职能指针,当然这需要额外的开销。当引用计数为0时,该对象没有被使用,可以进行析构。潜在问题:引用计数会带来循环引用的问题,会导致堆里的内存无法被回收导致内存泄漏。如下图所示:如果某一时刻pA指针指向了B对象,而PB指针指向了对象A。如果想要释放A对象内存,A对象发现自己内部有指针指向B对象,所原创 2021-11-07 16:20:09 · 613 阅读 · 0 评论 -
unique_ptr智能指针
基本概念:unique_ptr是专属所有权,所以unique_ptr管理的内存,智能被一个对象持有,不支持赋值和复制。移动语意:unique_ptr禁止了拷贝语意,但有时我们也需要转移所有权,于是提供了移动语意,即可以使用std::move()进行控制所有权的转移。下面来看代码实例。#include <iostream>#include <memory>using namespace std;int main(int argc, const char * argv原创 2021-11-07 15:03:55 · 128 阅读 · 0 评论 -
一文搞懂C++强制类型转换
1. (类型说明符) 表达式因为C++兼容C,所以C语言的这种强制类型转换在C++中同样适用。如下:表达式float valueA = 3.0f;int valueB = (int) valueA;2.static_cast用法: static_cast < type-id > ( expression )他有以下几种实用场景以及特性(1)用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换原创 2021-11-03 15:04:12 · 512 阅读 · 0 评论 -
C++中extern关键字
基本作用:一:extern有两个作用作用一:当其与"C"一起连用时,如extern “C” void m_simtest(int runtime_t)(注意这个函数可以使在实际项目开发中动态库中的函数,这个函数的实现基于C约定的风格)。为什么要这么用:因为C++相较于C支持函数重载,不同的编译器在编译源代码的时候会出现不同的解释。而C不支持函数重载,所以extern “C” ,也就限制了C++代码编译的时候的重载,使得编译器在编译m_simtest函数时遵从C规则。作用二:就是声明函数或全局变量的作用原创 2021-10-26 21:22:34 · 342 阅读 · 0 评论 -
char*与char[]的区别
在C语言中我们如果要定义一个字符串类型的数据变量时,通常有如下两种方法。方法一:char *pStr = “helloworld”方法二:char aStr[] = {“helloworld”};那这两种定义方法通常来讲是有一些区别的:(1)地址和地址的存储信息(2)可变与不可变解释:如上定义pStr可变,但是pStr[index](index指每个数组元素索引)的值是否可变取决于所指区间的存储区域是否可变。aStr不可变, aStr[index]的值可变。通过下面的实例代码分析:#inc原创 2021-10-24 18:29:00 · 193 阅读 · 0 评论