- 博客(37)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 c++面向对象高级编程 总目录
本文是对学习侯捷视频 c++面向对象高级编程系列博客的目录总索引。c++面向对象高级编程 学习一 不带指针的类:访问私有成员变量的方式,内联inline,常量成员函数,构造函数,值传递,引用传递,操作符重载c++面向对象高级编程 学习二 带指针的类:拷贝构造,赋值构造,析构函数c++面向对象高级编程 学习三 堆、栈和内存泄漏:堆,栈,内存泄漏,new,delete,array new,...
2020-03-24 10:55:11
334
2
原创 C++ primer 第15章 面向对象程序设计
文章目录前言OOP:概述继承动态绑定定义基类和派生类定义基类成员函数与继承访问控制与继承定义派生类派生类中的虚函数派生类对象及派生类向基类的类型转换派生类构造函数派生类使用基类的成员继承与静态成员派生类的声明被用作基类的类防止继承的发生类型转换与继承静态类型与动态类型在对象之间不存在类型转换虚函数对虚函数的调用可能在运行时才被解析c++的多态性派生类中的虚函数final和override说明符回避虚函数的机制抽象基类纯虚函数含有纯虚函数的类是抽象基类派生类构造函数只初始化它的直接基类重构访问控制与继承受保护
2020-06-21 22:51:43
1214
3
原创 C++ primer 第14章 操作重载与类型转换
文章目录基本概念直接调用一个重载的运算符函数某些运算符不应该被重载使用与内置类型一致的含义选择作为成员或者非成员输入和输出运算符重载输出运算符<<输出运算符尽量减少格式化操作输入输出运算符必须是非成员函数重载输入运算符>>算术和关系运算符相等运算符关系运算符赋值运算符复合赋值运算符下标运算符递增和递减运算符区分前置和后置运算符显式地调用后置运算符成员访问运算符函数调用运算符含有状态的函数对象类lambda是函数对象表示lambda及相应捕获行为的类标准库定义的函数对象在算法中使用标准
2020-05-30 14:55:15
306
原创 第2、3讲 图像的存储格式
本图像处理系列笔记是基于B站杨淑莹老师的课程进行学习整理的。文章目录黑白图像8位灰度索引图像8位伪彩色索引图像24位真彩色图像图像文件格式BMP文件存储格式BMP文件头位图信息头颜色表位图信息——BITMAPINFO结构BMP位图文件汇总按照颜色深度分类,常用图像文件:黑白图像8位索引图像24位真彩色图像黑白图像单色图像,二值图像,每个像素由0 或 1 组成8位灰度索引图像一个数据矩阵 X 和一个调色板矩阵 MAPX=[015020012050180250220100](1) X
2020-05-28 22:00:38
693
原创 C++ primer 第13章 拷贝控制
文章目录前言拷贝、赋值与销毁拷贝构造函数合成拷贝构造函数拷贝初始化和直接初始化拷贝初始化的发生:参数和返回值拷贝初始化的限制拷贝赋值运算符重载赋值运算符合成拷贝赋值运算符析构函数析构函数完成的工作什么时候会调用析构函数合成析构函数代码片段调用几次析构函数根据代码理解 拷贝构造函数、拷贝赋值运算符以及析构函数何时执行三 / 五法则需要析构函数的类也需要拷贝和赋值操作示例代码需要拷贝操作的类也需要赋值操作,反之亦然示例代码没有拷贝构造的类有拷贝构造的类=default阻止拷贝定义删除的函数析构函数不能是删除函数
2020-05-27 14:19:03
300
原创 uninitialized_copy测试代码示例
原测试代码如下:int main() { vector<int>v1{1,3,5,7,9,2,4,6,8}; allocator<int>alloc; auto data = alloc.allocate(9); uninitialized_copy(v1.begin(),v1.end(), data); auto end = data + 9; while(data!=end) { cout << *data <<" "; da
2020-05-26 13:56:16
275
原创 C++ primer 第13章 拷贝控制
文章目录前言拷贝、赋值与销毁拷贝构造函数合成拷贝构造函数拷贝初始化和直接初始化拷贝初始化的发生:参数和返回值拷贝初始化的限制拷贝赋值运算符重载赋值运算符合成拷贝赋值运算符析构函数析构函数完成的工作什么时候会调用析构函数合成析构函数代码片段调用几次析构函数根据代码理解 拷贝构造函数、拷贝赋值运算符以及析构函数何时执行三 / 五法则需要析构函数的类也需要拷贝和赋值操作示例代码需要拷贝操作的类也需要赋值操作,反之亦然示例代码没有拷贝构造的类有拷贝构造的类=default阻止拷贝定义删除的函数析构函数不能是删除函数
2020-05-20 15:20:57
825
原创 C++ primer 第12章 12.3 使用标准库:文本查询程序
文章目录使用标准库:文本查询程序文本查询程序设计数据结构在类之间共享数据自己的文本查询程序书中的文本查询程序使用标准库:文本查询程序我们将实现一个简单的文本查询程序,作为标准库相关内容学习的总结。我们的程序允许用户在一个给定文件中查询单词。查询结果是单词在文件中出现的次数及其所在行的列表。如果一个单词在一行中出现多次,此行只列出一次。行会按照升序输出。文本查询程序设计数据结构我们定义一个保存输入文件的类,将这个类命名为TextQuery,它包含一个vector和一个map。vector用来保存
2020-05-16 12:08:12
330
原创 C++ primer 第12章 动态内存
文章目录前言动态内存与智能指针shared_ptr类shared_ptr和unique_ptr都支持的操作shared_ptr独有的操作make_shared 函数shared_ptr的拷贝和赋值shared_ptr自动销毁所管理的对象shared_ptr还会自动释放相关联的内存程序使用动态内存出于以下原因直接管理内存使用new动态分配和初始化对象动态分配的const对象内存耗尽 定位new释放动态内存使用new和delete管理动态内存存在三个常见问题delete之后重置指针值智能指针和new对比sha
2020-05-13 21:03:10
686
原创 C++ primer 第11章 关联容器
文章目录使用关联容器map示例关联容器概述定义关联容器关联容器值初始化multimap和multiset关键字类型的要求pair类型pair上的操作关联容器操作关联容器额外的类型别名关联容器迭代器map迭代器set迭代器关联容器和算法添加元素向map添加元素检测insert的返回值使用insert代替下标操作写单词计数程序删除元素map的下标操作访问元素multimap查找元素代码示例一:coun...
2020-05-04 17:43:22
613
原创 C++ primer 第10章 泛型算法
文章目录概述findcount初识泛型算法只读算法只读算法accumulate只读算法equal写容器元素的算法算法fill算法fill_nback_inserter算法copy算法replace replace_copy重排容器元素的算法sortuniqueunique_copy定制操作向算法传递函数谓词算法stable_sort算法partitionlambda表达式lambda介绍算法fi...
2020-05-03 18:06:12
1290
原创 C++ primer 第9章 顺序容器
文章目录顺序容器类型确定使用哪种顺序容器容器库概览容器操作迭代器迭代器支持的所有操作迭代器支持的所有运算迭代器范围对构成范围的迭代器的要求标准库迭代器范围左闭右开的三种性质容器定义和初始化将一个新容器创建为另一个容器的拷贝将array拷贝到vector中的代码与顺序容器大小相关的构造函数标准库array具有固定大小赋值和swap测试swap的代码关系运算符顺序容器的特有操作向顺序容器添加元素容器元...
2020-04-30 18:18:06
534
原创 C++ primer 第8章 IO库
文章目录IO库类型和头文件IO对象无拷贝或赋值IO流的条件状态文件输入输出ifstream 示例ofstream 示例文件模式以out模式打开文件会丢弃已有数据每次调用open时都会确定文件模式ofstream 保留源文件 追加数据 示例string流istringstream示例ostringstream示例IO库类型和头文件为了支持不同种类的IO处理操作,标准库定义了一些IO类型。ios...
2020-04-26 16:59:02
142
原创 C++ primer 第7章 类
成员函数的声明必须在类的内部,定义则既可以在类的内部,也可以在类的外部。作为接口组成部分的非成员函数,它们的定义和声明都在类的外部。类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或函数成为它的友元。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语句即可。友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。友元不是类的成员,不受所在区域访...
2020-04-19 11:36:32
133
原创 C++STL与泛型编程(4)OOP(面向对象编程) Vs. GP(泛型编程)
文章目录OOP和GP为什么list不能使用标准库中的::sort算法?采用GP的好处OOP和GPOOP将datas和methods关联在一起GP将datas和methods分开为什么list不能使用标准库中的::sort算法?因为标准库的sort的算法用到了随机访问迭代器(RandomAccessIterator),而list链表所提供的迭代器不能随机访问,所以链表不能使用标准库中的::...
2020-04-09 11:54:46
210
原创 C++STL与泛型编程(3)容器之分类与测试
文章目录容器的分类序列式容器(sequence containers)代码示例辅助函数array 容器array容器的测试代码测试代码中部分函数解析vector 容器vector 容器的测试代码测试代码中部分函数解析list 容器list 容器的测试代码测试代码中部分函数解析forward_list 容器deque 容器stack 容器queue 容器关联式容器(Associative Conta...
2020-04-06 16:53:48
603
原创 C++STL与泛型编程__侯捷视频_学习博客_总目录
C++STL与泛型编程 侯捷 (1):c++重要网站相关C++STL与泛型编程(2) 第一个C++ STL Application:STL六大部件代码示例,容器前闭后开区间,auto关键字的用法示例...
2020-04-05 18:31:20
631
原创 C++STL与泛型编程(2) 第一个C++ STL Application
文章目录STL六大部件STL六大部件代码示例时间复杂度前闭后开区间auto关键字的用法STL六大部件容器分配器算法迭代器适配器仿函数容器要放东西,东西要占用内存,分配器可支持容器解决内存问题。算法处理容器中的数据。迭代器是容器和算法之间的桥梁。迭代器是泛化的指针。仿函数作用就像是一个函数。适配器可以对一些部件进行转换,例如,迭代器适配器,容器适配器,仿函数适配器。STL六大部件代...
2020-04-05 18:27:45
317
原创 C++STL与泛型编程 侯捷 (1)
泛型编程(Generic Programming,GP),就是使用template(模板)为主要工具来编写程序。重要网页:http://www.cplusplus.com/https://en.cppreference.com/w/http://gcc.gnu.org/...
2020-04-05 15:02:33
418
原创 c++面向对象高级编程 学习十七 const, new, delete
文章目录常量成员函数new和delete常量成员函数常量成员函数是不改变成员数据。当成员函数的const和non-const版本同时存在时,const object只能调用const版本,non-const object只能调用non-const版本。因此,可以看出,const是函数签名的一部分。当成员函数只有const版本时,const object和non-const object均能...
2020-04-02 15:26:48
215
原创 c++面向对象高级编程 学习十六 vptr和vtbl
文章目录当一个类中有一个或多个虚函数时,内存中会多一个虚指针(vptr,virtual pointer),指向一个虚表(vtbl,virtual table)父类有虚函数,则子类一定有虚函数在下图示意图中,我们可知,B继承A,C继承B。A有两个虚函数,B继承A则也有两个虚函数,同时B对虚函数vfunc1进行了重写,同理,C继承B,则C也有两个虚函数,C对虚函数vfunc1也进行了重写。故在...
2020-04-02 11:24:29
298
原创 c++面向对象高级编程 学习十五 组合&继承关系下的构造和析构
文章目录继承关系组合关系继承和组合继承关系构造由内而外,析构由外而内,内即是父类组合关系A拥有B,构造由内而外,析构由外而内,内即是B继承和组合构造和析构顺序如图:...
2020-04-01 17:38:15
181
原创 c++面向对象高级编程 学习十四 引用
文章目录referencereference的常见用途reference变量有三种形式:值,指针,引用int x=0; //值int* p=&x;//指向整型的指针,地址,指针在之后的程序中可以指向其他变量int& r=x;//引用,此处表示 r代表x,在之后的程序中r只能一直代表x,不能再代表其他变量,此时r x都是0int x2=5;r=x2;//此时r x都是...
2020-04-01 14:13:19
120
原创 c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for
文章目录数量不定的模板参数autoranged-base for数量不定的模板参数void print() {}//... 表示参数的数量不定template<typename T, typename...Types>void print(const T&firstArg, const Types&...args) { cout << fir...
2020-04-01 11:42:00
243
原创 c++面向对象高级编程 学习十二 模板
模板特化:模板是一种泛化的形式,特化是将参数类型进行指定,写出特化的版本,当在调用下图cout<<hash()(1000);的时候,由于特化中有struct hash{ }的版本,因此会直接调用特化部分。模板偏特化:模板偏特化即进行了局部的特化,分为个数的特化和范围的特化,而模板特化是进行了全局的特化。1.个数的偏:绑定的时候应从左往右进行绑定2.范围的偏:比如泛化是...
2020-03-25 12:29:49
138
原创 c++面向对象高级编程 学习十一 类模板、函数模板、成员模板
namespace经验谈:团队中函数或类的名字可能会冲突,因此使用namespace进行区分。类模板:template<typename T>函数模板:template<class T>,此处class可改成typename函数模板在使用的时候,不必指明类型,因为函数模板是去调用该函数,会在调用的时候传入参数,编译器会对函数模板进行参数推导,而类模板则需指明...
2020-03-25 11:56:16
165
原创 c++面向对象高级编程 学习十 function-like classes
本节是设计一个class,使它的行为像一个函数。如果一个东西能接受小括号()操作符,那么这个东西就称之为函数,或像函数的东西。下图为三个函数对()的重载,这三个类均为像函数的类,它们可接受()操作符,标准库中,仿函数都会去继承奇特的base classes....
2020-03-25 11:18:31
195
原创 c++面向对象高级编程 学习九 pointer-like classes
c++的class设计出来有两种形式,一种像指针,一种像函数智能指针里包含普通指针,要写 * 和 -> 的函数sp->method();//sp-> 经 T* operator*() const 函数,得到px//由于 箭头符号(->)作用下去得到的结果会继续用箭头符号作用下去//sp->method();即可转换为px->method();迭代...
2020-03-25 10:54:07
138
原创 c++面向对象高级编程 学习八 non-explicit-one-argement-ctor
explicit(显式的):作用是"禁止单参数构造函数"被用于自动类型转换non-explicit:class Fraction{public: Fraction(int num,int den=1) :m_numerator(num),m_denominator(den){} Fraction operator +(const Fraction& f){ retur...
2020-03-24 17:56:47
242
原创 c++面向对象高级编程 学习七 转换函数
转换函数:对象A和对象B之间的互相转换。class Fraction{public: Fraction(int num,int den=1) :m_numerator(num),m_denominator(len){} operator double()const{ return (double)(m_numerator/m_denominator); }privat...
2020-03-24 10:42:12
124
原创 H.264/AVC视频编解码技术详解 第一章 视频信息与压缩编码
H.264/AVC视频编解码技术详解系列笔记 是对 H.264/AVC视频编解码技术详解 课程的学习人与世界的交互从远古时代开始,人类就在不断为适应环境、改造环境而艰苦斗争。人类通过嗅觉、触觉、听觉、视觉等来适应社会,而视觉尤为重要,后来人们希望用更直观的形式记录所看到的东西,因此有了象形文字到现代文字的演变,以及壁画到绘画、照片、视频的演变。视频通过每一帧的图像表达信息,视频包含的音频可...
2020-03-09 17:16:02
672
原创 c++面向对象高级编程 学习六 虚函数
虚函数:在成员函数前面加上virtual,函数就变成了虚函数继承函数:子类可以调用父类的函数,叫做继承了函数,即函数的调用权三种函数:non-virtual 函数: 你不希望 derived class 重新定义 (override, 重写) 它.virtual 函数: 你希望 derived class 重新定义 (override, 重写) 它 , 且你对它已有默认定义 。...
2020-03-08 17:34:27
213
1
原创 c++面向对象高级编程 学习五 组合、委托与继承
组合 composition 表示has aqueue类中有一个deque容器,这种关系叫做 组合queue中的六个函数都是调用c的函数完成的template <class T>class queue {...protected:deque<T> c; // 底層容器public:// 以下完全利用 c 的操作函數完成bool empty() con...
2020-03-08 16:35:05
370
原创 c++面向对象高级编程 学习四 静态、类模板、函数模板
静态static:静态数据和静态函数,在内存中只有一份,不会随着创建对象的数目的增加而增加static数据:比如银行的account类中,账户名是普通数据,100个对象会有100个账户名,但利率都是相同的,因此利率可以设置为staticstatic函数:static函数和其他一般成员函数相比,static函数没有this指针,因此它不能处理类中的一般数据,只能处理static数据static...
2020-03-08 15:29:46
447
原创 c++面向对象高级编程 学习三 堆、栈和内存泄漏
栈,是存在于某作用域的一块内存空间。在函数体内声明的任何变量,其所使用的内存空间均来自于栈。堆,是指由操作系统提供的一块global内存空间,程序可动态分配获得若干内存空间块。new操作符生成的对象所占用的内存空间即是从堆中动态分配所得。c1所占用的空间来自栈,c2来自堆。c1在作用域结束之后消失,内存会被自动清理。c2是heap object,其生命在被delete时结束,若其作用域结...
2020-03-06 17:35:39
142
原创 c++面向对象高级编程 学习二 带指针的类
带指针的类,必须要自己写拷贝构造和赋值构造class String{public:String(const char* cstr = 0);String(const String& str);String& operator=(const String& str);~String();char* get_c_str() const { return m_da...
2020-03-06 17:16:32
262
原创 c++面向对象高级编程 学习一 不带指针的类
复数类 complex 是一个不带指针的类,其声明如下:class complex{public:complex(double r=0,double i=0):re(r),im(i){}complex& operator +=(const complex&);double real()const{return re;}double imag()const{retur...
2020-03-04 18:10:03
611
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人