C++学习笔记
文章平均质量分 67
c++
Charles Ray
现就职于某半导体公司。Software Programmer
展开
-
C++知识点整理
文章目录new、delete、malloc、free关系2.delete与 delete []区别什么是“引用”?申明和使用“引用”要注意哪些问题?将“引用”作为函数参数有哪些特点?在什么时候需要使用“常引用”?c++程序编译过程基类为什么需要虚析构函数?指针和引用的区别什么是多态?多态有什么用途?vector中size()和capacity()的区别。C++的内存分区(管理)用的比较多的几个C++11的新特性内存泄漏深拷贝与浅拷贝的区别悬空指针与野指针区别智能指针shared_ptrunique_ptr循原创 2021-03-16 23:08:00 · 286 阅读 · 0 评论 -
C++学习笔记 —— 内存分配 new
【分析】这里我们需要注意,new int[5] 仅仅分配了空间,但是 new A(),不仅仅为对象 obj 在堆上分配了空间,而且还调用了 A的构造函数,生成了这个对象同理,在调用 delete obj 的时候用系统默认的 malloc() 分配的内存要交给系统默认的 free() 去释放;用系统默认的 new 表达式创建的对象要交给系统默认的 delete 表达式去析构并释放;用系统默认的 new[] 表达式创建的对象要交给系统默认的 delete[] 表达式去析构并释放;原创 2024-09-18 15:13:32 · 484 阅读 · 0 评论 -
C++学习笔记 —— 类与对象
文章目录类构造与析构函数构造函数规则explicit关键字深拷贝与浅拷贝初始化的方式类对象作为类成员new关键字类类中的成员默认权限是privateprivate: 仅在类内部可以访问protected:子类可以访问public:外部可以访问#include <iostream>using namespace std;const double pi = 3.14;...原创 2020-02-16 23:50:17 · 330 阅读 · 1 评论 -
C++学习笔记 —— 封装:访问控制
重写是针对子类修改父类的虚函数,被重写的函数必须用virtual修饰。所以如果要定义需要暴露给外面,并且子类需要重写的函数则声明为public+virtual,重写的目的就是实现多态。只在本类中使用,可被继承,子类继承后也只在本类中使用的函数,声明为private。出了该类外则不能调用,既是是在其他类中调用此对象然后调用此函数也不行。只要需要对外暴露供其他类调用的函数,写为public,如果需要重写的函数则要加virtual。子类继承用的函数,直接使用,不做修改。需要子类强制实现的函数使用纯虚函数。原创 2023-06-01 23:13:29 · 173 阅读 · 0 评论 -
C++学习笔记 —— 继承与多重继承
继承同名变量解析如果子类只是继承父类的变量,则在子类中该变量其实只有一个,他的名字可以叫 d.A::n d.B::n 或 d.n,他们三个都是一个人class A { public: int n;}; class B: public A {}; class D: public B {}; int main() { D d; d.A::n = 10; d.B::n = 20; d.n = 30; cout<<原创 2020-12-13 13:12:44 · 2230 阅读 · 0 评论 -
C++学习笔记 —— 多态
文章目录什么是多态多态的使用静态连编动态连编多态的好处计算器例子纯虚函数和抽象类虚析构和纯虚析构向上转型和向下转型向下转型向上转型发生了多态什么是多态父类引用或者指针指向子类对象。编译时多态(静态连编):函数和运算符重载。编译阶段就确定了地址。运行时多态(动态连编):通常说的多态。多态的使用使用条件:父类中函数为虚函数子类继承父类并重写该虚函数,子类virtual可写可不写父类...原创 2020-02-21 15:42:51 · 370 阅读 · 0 评论 -
将YUV转成RBG属性的图片(C++)
概念解析YUV是指亮度参量和色度参量分开表示的像素格式,而这样分开的好处就是不但可以避免相互干扰,还可以降低色度的采样率而不会对图像质量影响太大。RGB是一种颜色编码方法RGB 三个字母分别代表了 红、绿、蓝,这三种颜色作为三个基底颜色,将它们以不同的比例相加,可以产生多种多样的颜色。RGB 图像中,每个像素点都有红、绿、蓝三个基底颜色,其中每种原色都占用 8 bit,也就是一个字节(0-255),那么一个像素点也就占用 24 bit,也就是3个字节。在图像显示中,一张 1280 * 720 大小的原创 2022-04-03 16:15:32 · 2131 阅读 · 0 评论 -
C++学习笔记 —— vector是如何增长的(实现原理)
文章目录规定问题1解决1问题2解决2总结规定string和vector实现一样。为了支持快速随机访问,vector中对象在内存中必须是连续存储的。问题1但是vector又是可变大小的。所以当vector空间用完了的时候,我们不能将元素添加到其他位置,因为vector必须连续存储才能保证快速随机访问。解决1所以vector策略是:开辟新的更大的连续空间,将vector中原来的元素移动到新空间,然后释放旧空间。问题2但是有出现问题:如果我们每添加一个元素,就做一次这样的移动数据到新内存操作,又原创 2022-03-25 23:19:14 · 1784 阅读 · 0 评论 -
C++学习笔记 —— 字符和字符串
文章目录c类型字符串c++ string字符判断string 转换c类型字符串#include <iostream>#include <cstring>using namespace std;//C语言中没有string所以用char数组表示int main(){ //定义字符串 char dog1[4] = {'b', 'd', 'g'}; //是char 数组,不是字符串 char dog2[5] = {'b', 'd', 'g',原创 2021-05-27 10:16:38 · 488 阅读 · 0 评论 -
C++学习笔记 —— iterator & pair & upperBound
iterator迭代器所有标准库容器都有迭代器。string和vector可以使用迭代器遍历,但是有下标访问,操作要方便些。像list,set,map不能用下标访问就只能使用迭代器遍历而像stack和queue既不能使用迭代器也不能使用下标访问,只能手动遍历有迭代器的类型都可以访问begin和end成员,其中begin返回第一个元素的迭代器,而end是一个尾后迭代器,指向最后一个元素的后一个位置,不存在该元素。*iter返回迭代器所指元素的引用,和指针类似++iter 令iter指向容器中的原创 2021-05-24 11:15:11 · 675 阅读 · 0 评论 -
C++学习笔记 —— 智能指针
文章目录用的比较多的几个C++11的新特性模板(非c++11)智能指针悬空指针与野指针区别智能指针shared_ptrunique_ptr循环引用问题解决方法:weak_ptr循环引用举例自己实现一个智能指针用的比较多的几个C++11的新特性智能指针lambda表达式auto类型推导范围for循环override 和 final 关键字模板(非c++11)c++ 模板他是泛型编程的基础。模板是创建泛型类或函数的蓝图或公式。模板或者泛型优点:它与某种特定类型无关,因此代码可重复使用它原创 2021-04-21 17:29:34 · 210 阅读 · 0 评论 -
C++学习笔记 —— STL之list(链表)
https://www.cnblogs.com/scandy-yuan/archive/2013/01/08/2851324.html实际上,list容器就是一个双向链表,可以高效地进行插入删除元素。O(1)复杂度#include <iostream>#include <list>#include <vector>#include <algorithm>// g++ -std=c++11 list.cc -o test && tes原创 2020-05-15 23:41:19 · 1243 阅读 · 0 评论 -
C++学习笔记 —— STL之二维数组
#include <iostream>#include <vector>#include <algorithm>using namespace std;// g++ -std=c++11 2Dvector.cc -o test && test.exe//遍历数组一: 直接访问void traverseVecvec1(vector<vector<int>> vecvec){ if (vecvec.empty())原创 2020-05-15 23:39:09 · 1441 阅读 · 0 评论 -
C++学习笔记 —— STL之set和map
文章目录set 集合map这里把set和map放到一块因为两者都是关联性容器,也就是说他们的存储顺序与放入元素顺序不同,他们会自动维护一个容器中元素的顺序。而且他们的api有很多相似之处。set 集合https://blog.csdn.net/sevenjoin/article/details/81908754https://blog.csdn.net/ktigerhero3/articl...原创 2020-04-20 22:42:56 · 290 阅读 · 0 评论 -
C++学习笔记 —— STL之栈队列和优先队列
文章目录链表队列和栈链表链表list插入和删除永远是常数时间,采取动态分配不会浪费资源,list是一个双向循环链表非连续空间头节点不保存数据#include <iostream>#include <list>using namespace std;using namespace std;void printList(list<int> l...原创 2020-04-20 22:35:07 · 270 阅读 · 0 评论 -
C++学习笔记 —— STL之数组和vector
文章目录vector二维数组(二维vector)deque 双端数组参考文章https://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.htmlvectorc++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组和指针,而更应该多用高级的vector和迭代器简单地说,vector是一个能够存放任意类型的动态...原创 2020-04-14 23:32:11 · 398 阅读 · 0 评论 -
C++学习笔记 —— 类型转换
文章目录静态类型转换(编译时类型检查)父类和子类之间转换基本数据类型转换动态类型转换(动态类型检查)动态类型转换和静态类型转换的区别总结使用指导静态类型转换(编译时类型检查)关键字:static_cast父类和子类之间转换向上转换:子类向父类转换是安全的。向下转型:父类转换成子类是不安全的#include <iostream>using namespace std;...原创 2020-02-25 21:18:37 · 2654 阅读 · 0 评论 -
C++学习笔记 —— 泛型编程(模板)
文章目录函数模版引出实现模版实现机制类模版的使用成员函数的创建时机类模版做函数参数子类继承模版类类外实现成员函数类模版的分文件编写函数模版引出比如我们要用一个交换数据的函数:void swapFunc(int &a, int &b){ int temp = a; a = b; b = temp;}但是当我们要传入double类型,float类型,long类型,...原创 2020-02-25 11:18:14 · 264 阅读 · 0 评论 -
C++学习笔记 —— 回合制小游戏案例
文章目录英雄怪物武器武器父类小刀屠龙刀开始游戏main函数编译运行:运行结果总结说明添加倚天剑实现多态下面用多态实现一个回合制小游戏:英雄Hero.h#ifndef __HERO_H__#define __HERO_H__class Weapon;class Monster;class Hero{public: Hero(/* args */); ~Hero...原创 2020-02-23 14:42:42 · 5744 阅读 · 3 评论 -
C++学习笔记 —— 头文件include问题和多文件编译
文章目录include头文件放到.h文件还是.cc文件头文件相互引用问题(引用其他类)多源文件编译命令今天主要叙述三个问题,是在做一个小游戏程序遇到的。include头文件放到.h文件还是.cc文件首先看这个问题,链接C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别非常好描述了利弊,我总结一下:头文件中尽量不要include其他文件,一个是防止头文件相互引用问题,一...原创 2020-02-23 13:27:11 · 6385 阅读 · 0 评论 -
C++学习笔记 —— struct实现继承与const函数多态
参考文章https://blog.csdn.net/IT_job/article/details/79183810https://blog.csdn.net/puppet_master/article/details/48751575Struct与class关键字的区别:使用struct也可以实现继承多态,那我们还要class关键字又什么用呢唯一区别就是:struct与class唯一不同的是struct默认的关键字是public, class默认的关键字是private。使用class更好的进行原创 2020-07-05 22:26:22 · 1529 阅读 · 0 评论 -
C++学习笔记 —— static
文章目录继承的方式继承中构造和析构顺序当父类中没有无参构造多继承虚继承继承的方式首先继承肯定拿不到父类中的private成员,只能拿public和protected继承的三种方式:公有继承,那么子类拿到的父类public和protected还放到自己的public和protected。保护继承,子类拿到父类的都放到自己的protected。私有继承,子类拿到父类的都放到自己的pri...原创 2020-02-20 15:18:16 · 292 阅读 · 0 评论 -
C++学习笔记 —— 运算符重载
文章目录运算符重载有两种方式+号运算符重载问题成员函数重载,接收一个参数友元函数重载:两个参数运算符重载有两种方式c++运算符重载之加号(+)一、成员函数重载二、友元函数重载+号运算符重载问题#include <iostream>using namespace std;class Person{public: Person(int a, int b) : m_...原创 2020-02-19 18:05:56 · 409 阅读 · 0 评论 -
C++学习笔记 —— 命名空间、内联函数、按值/引用/指针传递
命名空间为了解决命名冲突的问题。比如说我调用一个方法名,比如说孙悟空,但是在我引用的头文件命名空间中存在两个文件都有sun这个方法。那么如果我们直接调用,计算机就不知道我们使用的是哪一个,就会报错。所以我们要指明。#include <iostream>using namespace std; // 第一个命名空间namespace LOL{ void su...原创 2020-02-18 23:02:45 · 464 阅读 · 0 评论 -
C++学习笔记 —— 变量存储、友元
文章目录函数默认值static静态成员变量静态成员函数引出友元函数函数默认值void func(int a, int b = 10, int c =1){ cout<< a + b + c << endl;}若一个函数参数设置为默认值,则他后面的参数都需要设置。如果传入参数则使用传入的,如果没有传入则使用默认值。函数默认值设置后,则该函数设置重载就可能发...原创 2020-02-18 23:01:07 · 1086 阅读 · 0 评论 -
C++学习笔记 —— const限定符
文章目录命名空间命名空间为了解决命名冲突的问题。比如说我调用一个方法名,比如说孙悟空,但是在我引用的头文件命名空间中存在两个文件都有sun这个方法。那么如果我们直接调用,计算机就不知道我们使用的是哪一个,就会报错。所以我们要指明。#include <iostream>using namespace std; // 第一个命名空间namespace LOL{ ...原创 2020-02-07 21:50:28 · 287 阅读 · 0 评论