c++之静态库与动态库
摘要:一.代码分发方式 代码分发方式有三种: 二.动态库与静态库区别 三.C/C++到可执行程序的过程: 四 总结 首先清楚,一般来说源码包含.h+.cpp两个文件,而静态库包含.h+.lib文件,动态库包含.h+.lib+.dll,明显动态库要比静态库的文件要更零散一点; 其次,要知道.h/.lib/.
阅读全文
posted @
2023-04-07 13:28
斗战胜佛美猴王
阅读(103)
推荐(0) 编辑
c++虚函数表
摘要:1.概述 为了实现C++的多态,C++使用了一种动态绑定的技术,这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。 2.类的虚表[指针类型的数组来保存虚函数的函数指针,仅属于类] 每个包含了虚函数的类都包含一个虚表,类中只要有虚函数,就会有一个虚表来维护。 虚表是属于类
阅读全文
posted @
2023-03-15 16:35
斗战胜佛美猴王
阅读(430)
推荐(0) 编辑
c++之仿函数[1]
摘要:1.为什么要有仿函数 假设我们现在有一个数组,数组中存有任意数量的数字,我们希望能够统计出这个数组中大于 10 的数字的数量,你的代码很可能是这样的: #include <iostream> using namespace std; int RecallFunc(int *start, int *e
阅读全文
posted @
2023-03-15 11:22
斗战胜佛美猴王
阅读(311)
推荐(0) 编辑
c++之模版(函数模版+类模版)
摘要:一.函数模版【一个函数,不同类型的参数来调用】 函数模板是C++新增的一种性质,它允许只定义一次函数的实现,即可使用不同类型的参数来调用该函数(一个函数多用)。这样做可以减小代码的书写的复杂度,同时也便于修改(注:使用模板函数并不会减少最终可执行程序的大小,因为在调用模板函数时,编译器都根据调用时的
阅读全文
posted @
2023-03-13 16:20
斗战胜佛美猴王
阅读(250)
推荐(0) 编辑
C++类内定义引用成员
摘要:遵循三个规则 C++类内可以定义引用成员变量,但要遵循以下三个规则: 不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。 构造函数的形参也必须是引用类型 不能在构造函数的函数体赋值(为什么不是说初始化呢?因为所有的成员变量都是在初始化列表中完成的),必须在初
阅读全文
posted @
2023-03-13 10:21
斗战胜佛美猴王
阅读(329)
推荐(0) 编辑
c++之虚基类
摘要:1.虚基类 在多继承关系中,如果一个派生类的从两个父类那里继承过来,并且这两个父类又恰恰是从一个基类那里继承而来【菱形继承问题】。那这样就麻烦了,因为你可能继承了两份一样的成员!这不仅多占用内存,而且还出现了所谓二义性问题。 #include <iostream> using namespace s
阅读全文
posted @
2023-03-09 18:05
斗战胜佛美猴王
阅读(190)
推荐(0) 编辑
c++移动构造函数
摘要:一.定义【源对象资源的控制权全部移交给目标对象】 有些复制构造是必要的,我们确实需要另外一个副本;而有些复制构造是不必要的,我们可能只是希望这个对象换个地方,移动一下而已。在C++11之前,如果要将源对象的状态转移到目标对象只能通过复制。而现在在某些情况下,我们没有必要复制对象——只需要移动它们。移
阅读全文
posted @
2023-03-09 13:34
斗战胜佛美猴王
阅读(2963)
推荐(2) 编辑
c++中内联函数和宏函数的区别
摘要:一. 区别: 是不是函数: 宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率; 内联函数本质上是一个函数,内联函数一般用于函数体的代码比较简单的函数,不能包含复杂的控制语句,while、switch,并且内联函数本身不能直接调用自身。
阅读全文
posted @
2023-02-27 17:03
斗战胜佛美猴王
阅读(138)
推荐(0) 编辑
c++函数指针
摘要:一.定义介绍 1.1 定义 如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。所以,可以理解为每一个函数都占用
阅读全文
posted @
2023-02-27 16:12
斗战胜佛美猴王
阅读(205)
推荐(0) 编辑
C++11之线程库
摘要:在 C++11 之前,涉及到多线程问题,都是和平台相关的,比如 Windows 和 Linux 下各有自己的接口,这使得代码的可移植性比较差。C++11 中最重要的特性就是对线程进行支持了,并且可以跨平台,这使得 C++ 在并行编程时不需要依赖第三方库。C++11 在原子操作中还引入了原子类的概念。
阅读全文
posted @
2023-02-06 18:23
斗战胜佛美猴王
阅读(299)
推荐(0) 编辑
C++之智能指针
摘要:一、为什么需要智能指针? 如果在 div() 输入的 b == 0,那么就会抛出一个异常,被 main() 捕获,但是在 Func() 中 new 申请的资源就会因没释放而发生泄露问题,这是一种异常安全问题。 #include <iostream> using namespace std; int
阅读全文
posted @
2023-02-02 18:04
斗战胜佛美猴王
阅读(287)
推荐(0) 编辑
详解 C++ 左值、右值、左值引用以及右值引用
摘要:一、左值和右值 1.1左值 [可以取地址的对象就是左值] 左值是一个表示数据的表达式,比如:变量名、解引用的指针变量。一般地,我们可以获取它的地址和对它赋值,但被 const 修饰后的左值,不能给它赋值,但是仍然可以取它的地址。总体而言,可以取地址的对象就是左值。 // 以下的a、p、*p、b都是左
阅读全文
posted @
2023-02-02 10:04
斗战胜佛美猴王
阅读(9834)
推荐(15) 编辑
&以及&&的用法总结
摘要:一.&两种用法[取地址/引用] 取地址和引用没有任何关系,不要瞎联系! 1.1 取地址 // 很常规,仅此而已 std::string *p = &s; 1.2 引用 引用是某一个变量的别名,对引用的操作就是对绑定变量的操作。 引用是变量的别名,故在定义时必须初始化,且引用名具有唯一性,绑定后不可再
阅读全文
posted @
2023-01-31 17:07
斗战胜佛美猴王
阅读(701)
推荐(0) 编辑
c++之上下转型 [static_cast和dynamic_cast] 详解
摘要:一.引言 1.1 类继承关系图 从图中可以看出,派生类不仅有自己的方法和属性,同时它还包括从父类继承来的方法和属性。当我们从派生类向基类转换时(向上转换),不管用传统的c语言还是c++转换方式都可以百分百转换成功。但是可怕是向下转换类型,也就是我们从基类向派生类转换,向下转换后派生类自己的方法和属性
阅读全文
posted @
2022-09-27 14:20
斗战胜佛美猴王
阅读(1334)
推荐(0) 编辑
c++中const在函数前后
摘要:一.函数前后const 函数前const:普通函数或成员函数(非静态成员函数)前均可加const修饰,表示函数的返回值为const,不可修改【修饰的是函数返回值】: const returnType functionName(param list) 函数后加const:只有类的非静态成员函数后可以加
阅读全文
posted @
2021-08-25 09:32
斗战胜佛美猴王
阅读(2750)
推荐(0) 编辑
C/C++中extern关键字详解
摘要:引言 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用: 一 . extern "C" void fun(int a, int b) 【指定编译规则】
阅读全文
posted @
2021-08-24 11:16
斗战胜佛美猴王
阅读(716)
推荐(0) 编辑
C++锁的管理-- std::lock_guard和std::unique_lock
摘要:前言 锁管理遵循RAII习语来处理资源。锁管理器在构造函数中自动绑定它的互斥体,并在析构函数中释放它。这大大减少了死锁的风险,因为运行时会处理互斥体。。锁管理器在C++ 11中有两种:用于简单的std::lock_guard,以及用于高级用例的std::unique_lock。 std::lock_
阅读全文
posted @
2021-08-20 15:03
斗战胜佛美猴王
阅读(1500)
推荐(1) 编辑
【c++】虚函数与纯虚函数以及抽象类的虚析构问题
摘要:一.虚函数 [虚函数借助于指针或者引用来达到多态的效果 ] 1.1 定义 virtual void fuc(); 在基类中将一个函数声明为虚函数,使该函数具有虚属性,那么其所有派生函数中该函数的重写都具备了虚属性,也就使得基类指针可以调用派生类实例中继承自该基类的所有成员函数,且若有重写,调用的都是
阅读全文
posted @
2021-08-20 10:03
斗战胜佛美猴王
阅读(493)
推荐(0) 编辑