![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 93
Bqv它不想做功
这个作者很懒,什么都没留下…
展开
-
重新系统学习C++遇到的坑(系列二)(写了关于const和*(或&)的混合使用,该如何理解?)
类型unsigned int可缩写成unsignedint、char、double这些内置类型,实际上可以看成int类类型、char类类型、double类类型,因为类设计的目的之一是让我们能像使用C++内置类型一样自然地使用类负数转换为无符号数,结果等于这个负数对无符号类型表示的数值总数(看这个无符号类型所占字节,即2的几字节次方)取模后的余数2的32次方=4294967296-32转换为无符号整型数为4294967264(负数加上无符号整型数能表示最大值),-1转换为无符号整型数为4294967.原创 2020-08-02 08:51:23 · 226 阅读 · 0 评论 -
重新系统学习C++遇到的坑(系列一)
在没有using namespace std;这一行的时候,如果用到endl,别忘写成std::endl;原创 2020-07-21 11:17:13 · 138 阅读 · 2 评论 -
EssentialC++第七章总结+课后习题+踩雷清单(最后一期,至此EssentialC++完结!)
总结这一章讲了异常处理。首先你得有个抛出异常,用throw表达式,可以throw整数、字符串、异常类类对象,可以定义异常类然后需要捕获异常,用catch子句,catch{//…}异常对象的类型是会和捕获并处理异常的catch子句比对的,看哪个catch子句能处理这种类型的异常对象,catch子句可以重新抛出异常交由其他catch子句处理,就在catch子句最后写个throw;就行。捕获任何类型异常,写catch(…){//…}然后讲了提炼异常,介绍try块,try{//…}和catch子句搭配,原创 2020-06-06 13:36:47 · 353 阅读 · 0 评论 -
Essential C++学习记录&笔记整理45(局部资源管理、标准异常)
目录局部资源管理auto_ptr标准异常解析new表达式的具体工作过程bad_alloc异常类自己编写异常类并将其继承于exception之下ostringstream类istringstream类局部资源管理函数执行之初所分配的资源不一定最终会被释放掉。比如某函数里使用了new表达式从堆内存里分配空间给一个对象,然后把对象地址分配给一个指针。假如这个操作执行完以后,在释放资源的语句之前这个函数或这个函数内调用的函数抛出了异常,而且没在这个函数里解决,那么释放资源的语句不会被执行,这就极其危原创 2020-06-05 19:00:09 · 249 阅读 · 0 评论 -
Essential C++学习记录&笔记整理44(提炼异常(try块))
目录提炼异常try块介绍try块对异常处理机制的作用(有了try块异常处理机制该怎么办)初学C++在异常处理上犯的错误提炼异常try块介绍try块以关键字try作为开始,然后{},catch子句放在{}之后。据给自:bool has_elem(Triangular_iterator first,Triangular_iterator last,int elem){ bool status=true; try { while(first!=last) { if(*first=原创 2020-06-05 14:05:13 · 172 阅读 · 0 评论 -
Essential C++学习记录&笔记整理43(抛出异常、捕获异常)
到了第七章,异常处理,最后一章,内容比较少,坚持看完,坚持记笔记,奥力给!目录抛出异常介绍异常及其处理异常对象和异常类及异常类的用法捕获异常catch子句抛出异常介绍异常及其处理异常处理机制两个主要成分:①异常的坚定与发出,②异常的处理方式异常产生及处理都可能发生在函数上异常出现之后,程序的执行便被暂停。同时异常处理机制搜索程序中有能力处理这一异常的地点。异常处理完毕,程序继续在异常处理点接着执行C++通过throw表达式产生异常。举个例子:inline void Triangular原创 2020-06-04 23:46:14 · 218 阅读 · 0 评论 -
EssentialC++第六章总结+课后习题+踩雷清单
总结讲了模板类,这是在原基础上把对象类型抽离出来,变成template<typename 占位符>这种形式。然后怎么定义模板类,模板成员函数,和定义一般模板函数大同小异,抽离出来类型就可以,注意别忘把类型抽离出来,然后注意不该改成模板类型的别改成模板类型(比如大小、长度,这只能是整数,名字,这只能是string型)关于模板样式的形参,写这样的形式:const 模板类型名& 形参名,因为模板类型也许是内置类型也许是class类型,这样的格式避免复制所带来巨大的开销,使程序效率降低。原创 2020-06-03 17:09:05 · 288 阅读 · 0 评论 -
Essential C++学习记录&笔记整理42(以模板参数作为一种设计策略、成员模板函数)
目录以模板参数作为一种设计策略成员模板函数非模板类里定义成员模板函数模板类里定义成员模板函数以模板参数作为一种设计策略讲的什么呢,就是将某种特定的命名规范强加于被当作参数的类身上:每个类都必须提供某模板类中调用到的函数。这样的独特设计很高级,说明模板类的类型参数不光可用以传递元素类型,还可以传递class类型。举个例子:template<typename num_seq>class NumericSequence{public: NumericSequence(int len=1,i原创 2020-06-02 20:24:26 · 225 阅读 · 0 评论 -
Essential C++学习记录&笔记整理41(一个以模板函数完成的输出运算符、常量表达式与默认参数值)
目录一个以模板函数完成的输出(<<)运算符常量表达式与默认参数值模板参数默认值全局作用域内的函数及对象用于模板类一个以模板函数完成的输出(<<)运算符非模板函数形式的重载运算符函数是这样(声明)ostream& operator<<(ostream&,const BinaryTree<int>&);而模板函数形式的重载运算符函数是这样(定义)template <typename elemType>inline原创 2020-06-02 19:42:11 · 281 阅读 · 0 评论 -
Essential C++学习记录&笔记整理40(实现一个模板类)
关于new表达式new表达式可分解为两个操作:①向程序的空闲空间请求内存,若分配到足够空间,则返回指针,指向新对象;若未分配到足够空间,则抛出异常bad_alloc(异常处理)②如果new 类型名(初值),则该新对象被初始化。举个class类型的例子:_root = new BTnode<elemType>(elem);其中elem被传入BTnode模板类的类构造函数。分配内存失败,初始化操作(类构造函数操作)不会发生。模板类成员函数的定义/声明实战:举几个例子吧,主要为了原创 2020-06-02 17:35:03 · 212 阅读 · 0 评论 -
Essential C++学习记录&笔记整理39(被参数化的类型,模板类(类模板)的定义,模板类型的参数处理)
终于tm的有时间看C++啦!断更了几天,终于开始向前探索了!到了第六章,加油,奥里给!目录前言被参数化的类型模板类的定义模板类型参数的处理前言Template(模板)能根据用户指定的特定值或特定类型,自动产生一个函数或类。被参数化的类型为什么要有模板呢,举一个类的例子:(假设已想好要定义BTnode类,用以存储结点数值,和左右孩子指针)class string_BTnode{public: //...private: string _val; int _cnt; string_B原创 2020-05-31 16:53:02 · 369 阅读 · 0 评论 -
EssentialC++第五章总结+课后习题+踩雷清单
目录总结习题5.15.2报错信息学习(新的一批,包括代码顺序位置问题)关于reverse_iterator(逆向迭代器)的学习关于奇怪的代码学习总结这章开始介绍了面向对象编程概念,最主要特质:继承和多态继承我们知道了父类和子类,即基类和派生类,这两个类之间的关系叫继承体系多态:动态绑定然后介绍了继承体系,LibMat类,Book类和AudioBook类的三层类继承体系介绍不带继承的多态(类之间的继承关系不大)如何定义抽象基类,三要素(三步法)如何定义派生类,很多要求定义完了抽象基类和派生类原创 2020-05-26 12:21:32 · 1483 阅读 · 0 评论 -
Essential C++学习记录&笔记整理38(运行时的鉴定机制)
这一节说了点新东西。目录运行时类型鉴定机制(RTTI)typeid运算符type_info类static_cast运算符dynamic_cast运算符运行时类型鉴定机制(RTTI)typeid运算符这是运行时类型鉴定机制得一部分,由程序语言支持。typeid运算符让我们得以查询多态化的类指针/引用,来获得类指针/引用所指对象的实际类型。用法举例:#include<typeinfo>inline const char* num_sequence::what_am_i()const原创 2020-05-23 20:51:23 · 384 阅读 · 0 评论 -
Essential C++学习记录&笔记整理37(在派生类中定义一个虚函数)
目录关于派生类和派生类提及虚函数的一些小细节虚函数的静态解析关于基类指针和引用的一些说明关于派生类和派生类提及虚函数的一些小细节在派生类中,如果其基类的同名成员函数已声明为虚函数(函数声明开头加了virtual),则派生类的同名成员函数声明/定义前不用加virtual也就是说,当我们在派生类中,为了覆盖基类的某个虚函数而进行同名函数的声明时,可以不加关键字virtual,编译器会根据两个同名函数的原型声明,自动决定派生类的某个同名函数是否会覆盖其基类中的同名函数定义派生类,要么覆盖基类的虚函数,要原创 2020-05-23 16:59:10 · 574 阅读 · 0 评论 -
随笔:体悟到的C++知识
关于引用和指针指针有弹性,灵活,让它指向哪个和指针同类型的对象都可以;引用(仅说明&)必须绑死在某个对象就想到这一个,其他的再说原创 2020-05-23 10:34:50 · 182 阅读 · 0 评论 -
Essential C++学习记录&笔记整理36(运用继承体系,基类应该多么抽象,初始化、析构、复制)
目录运用继承体系基类应该多么抽象每个派生类的共同操作应该再抽离出来给基类类定义里。指针和引用的复习初始化、析构、复制关于派生类对象的子对象派生类对象的子对象的各自构造函数调用机制派生类对象子对象的各自拷贝构造函数和拷贝赋值运算符调用机制运用继承体系这一节没什么要说的,有一点就是基类和其派生类构成一个两层的继承体系。基类应该多么抽象每个派生类的共同操作应该再抽离出来给基类类定义里。之前咱们设计的抽象基类提供的仅仅只有接口(一堆纯虚函数,和等被派生类继承的基类成员函数的声明/定义),并未有任何实原创 2020-05-22 17:53:56 · 180 阅读 · 0 评论 -
Essential C++学习记录&笔记整理35(定义一个派生类)
派生类说明:派生类由两部分构成:①基类构成的子对象(由基类的非静态数据成员(如果有)组成。②派生类的部分(派生类的非静态数据成员)组成。原创 2020-05-20 16:55:16 · 260 阅读 · 0 评论 -
Essential C++学习记录&笔记整理34(不带继承的多态,定义一个抽象基类)
一步步深入进面向对象编程风格去。目录不带继承的多态定义一个抽象基类定义抽象基类第一步定义抽象基类第二步定义抽象基类第三步纯虚函数其他说明完整抽象基类的定义不带继承的多态5.3节我看了三遍,也没看出他讲了什么东西,反正diss一遍自己写的代码。我矮子里拔将军,找出了这些知识点来给大家讲述。static_cast是一个特殊的转换记号,可将整型变量转换为对应的枚举型变量。(如可用于检验某整数是不是代表某一有效数列)用法举例:class num_sequence{public: //... st原创 2020-05-18 22:07:08 · 423 阅读 · 1 评论 -
Essential C++学习记录&笔记整理33(虚函数,protected,基类派生类构造函数析构函数调用关系)
这一节涉及到虚函数的知识。什么叫虚函数?默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,咋办啊?就在成员函数的声明前加上关键字virtual,举个例子:class LibMat{public: LibMat() { cout<<"LibMat::LibMat() default constructor!\m"; //LibMat类的默认构造构造函数 } virtual ~LibMat() { cout<<"L原创 2020-05-17 22:38:58 · 324 阅读 · 0 评论 -
Essential C++学习记录&笔记整理32(面向对象编程概念)
概述第五章主要讲的是面向对象编程风格,是C++基于对象的编程风格的一个进阶吧!应该是个精华部分!好好啃!好好学!面向对象编程概念class的主要用途是引入一个崭新的数据类型,能够更直接地在我们所设计的程序系统中表现我们想表现的实体。类间的关系需要“面向对象编程模型”加以设定。面向对象编程概念最主要特质:继承和多态继承概述继承是将一群相关的类组织起来,分享这些类之间的共通数据和操作行为继承机制定义着父子关系。父类(基类)定义着所有子类共通的共有接口和私有实现子类(派生类)可以增加/覆原创 2020-05-17 13:15:22 · 185 阅读 · 0 评论 -
EssentialC++第四章总结+课后习题+踩雷清单
EssentialC++chap4(基于对象的编程风格)总结总结的目录EssentialC++chap4(基于对象的编程风格)总结类的介绍public公共接口private私有成员实现一个类,分文件式类主体外定义成员函数,需要类名::成员函数名(参数表){}析构函数和构造函数构造函数:用来初始化类里的私有成员析构函数:在类对象的生命周期结束后析构函数进行其资源(内存)的释放,需要手动定义mutable(可变)和const(不变)mutableconstthis指针静态类成员静态成员函数泛型指针类运算符重载原创 2020-05-13 02:38:58 · 597 阅读 · 2 评论 -
Essential C++学习记录&笔记整理31(指针,指向类成员函数)
呜呼,终于到了最后一章!指向类成员函数的指针指向类成员函数的指针,总归是函数指针,有返回类型,有参表。只不过这个指针指向的函数是某个类里的成员函数。指向类成员函数的指针要标明它所指的是哪个类,如:void (num_sequence::*pm)(int)=0;这里pm这个指针就是指向的num_sequence这个类的成员函数。而且pm指针的初始值为0,表示他不指向任何成员函数。这个成员函数的返回值是void,参表只有单参,参数类型是int好你可能会问我有嘛用?就像函数指针一样,有嘛用?对原创 2020-05-11 17:29:59 · 219 阅读 · 0 评论 -
Essential C++学习记录&笔记整理30(重载iostream运算符)
这一节解决了我前面遇到的操作符重载的问题而不能显示类对象的数据,以及输出的显示顺序问题。好的让我们开始总结这一节所学为什么有要重载iostream运算符?因为我们想对某个类对象进行读写操作。不重载iostream类运算符直接cout<<类对象<<endl;或cin>>类对象;编译器会报错目录重载ostream运算符重载istream运算符报错信息,学习一下重载ostream运算符直接cout<<类对象<<endl;编译器会报错,所以原创 2020-05-11 12:16:27 · 730 阅读 · 0 评论 -
Essential C++学习记录&笔记整理29(实现一个function object)
所谓函数对象就是一种提供有函数调用运算符的类如果编译器遇到了一个函数调用,比如lt(ival);,那么lt这可能是个函数名或函数指针、也可能是个提供了函数调用运算符的的函数对象,如果lt是个类对象,那么编译器就会在内部将此语句转换为lt.operator(ival);函数调用运算符可以接受任意个参数。比如它可以支持矩阵(Matrix)这个类的多维度下标操作,而下标运算符只能接受一个参数。话不多说,咱们给一个代码示例!//LessThan.h文件#ifndef _LESSTHAN_H_#def.原创 2020-05-10 23:50:43 · 217 阅读 · 1 评论 -
Essential C++学习记录&笔记整理28(实现一个copy assignment operator)
还记得Essential C++学习记录&笔记整理22(什么是构造函数和析构函数)提到的默认的成员逐一复制操作?对于那个Matrix类,里面包含了一个指针成员(私有成员),然而这个类我们声明两个对象,然后一个对象给另一个对象赋值,采用默认的成员逐一复制操作的话(即前者=后者;),就会让两个类的指针成员都指向一个堆里的动态数组,要是这两个类对象的析构函数都作用的话,前者析构对象作用后,delete掉了这个堆里的动态数组,那么,后者的指针成员就成了个野指针,显然这种方法就不对。所以Matrix类需要原创 2020-05-10 22:35:04 · 146 阅读 · 0 评论 -
Essential C++学习记录&笔记整理27(友元函数,友元类)
这个标题我寻思我要不要这么写出来。最终还是写了,那我就围绕标题开始说话合作关系必须建立在友谊的基础上为什么会有friend?friend的建立,通常是为了效率考虑。类与类之间的或类与某非成员函数之间的简单的操作我们不需要friend比如数据成员的读写,我们可以给数据成员的读写这种操作提供具有public访问权限的inline函数(在某类的public:里写inline函数,这个inline函数是关于某类的数据成员的读写)。而类与类之间的或类与某非成员函数之间的复杂操作我们可以像inline函数那样直原创 2020-05-10 22:15:35 · 115 阅读 · 0 评论 -
Essential C++学习记录&笔记整理26(打造一个Iterator Class)
打造一个Iterator Class这一节讲了运算符重载的相关知识,以及嵌套类型(typedef)运算符重载泛型指针类的运算,肯定不能用正常的内置类型的那种运算符。为什么?这是规定!此时我就需要运算符重载,怎么运算符重载呢?运算符重载,说白了就是我重新定义原有的运算符以适合泛型指针类的运算。我可以像定义成员函数那样重新定义运算符。运算符函数很像普通函数,但是运算符函数不用指定函数名。只需要在运算符前加上关键字operator即可,如:class Triangular_iterator{原创 2020-05-09 21:14:26 · 505 阅读 · 0 评论 -
Essential C++学习记录&笔记整理25(静态类成员)
有些难度了。尽量搞清楚!静态类成员原创 2020-05-09 14:55:40 · 226 阅读 · 0 评论 -
Essential C++学习记录&笔记整理24(什么是this指针)
this指针,是一个能在成员函数里指向调用者(即类对象)的指针。我们需要一种可以指向整个类对象的指针,就是this指针。编译器自动将this指针加到每一个成员函数的参表。举个例子(rhs被绑定至tr2,也就是引用tr2的内存空间,就是一只质量忽略不计的绳子牵着tr2的内存空间)在成员函数内,this指针可以让我们访问this指针调用者(下面类主体外定义成员函数的例子,this指针调用者是tr...原创 2020-05-07 00:45:55 · 130 阅读 · 0 评论 -
Essential C++学习记录&笔记整理23(何谓mutable(可变)和const(不变))
何谓mutable(可变)和const(不变)const(不变)先给个代码例子说明一下:class Triangular{public://以下是const成员函数 int length() const{return _length;}//最好)和const中间加一个空格,不加也行。 int beg_pos() const{return _beg_pos;} int elem(...原创 2020-05-04 21:48:37 · 182 阅读 · 0 评论 -
Essential C++学习记录&笔记整理22(什么是构造函数和析构函数)
什么是构造函数和析构函数目录什么是构造函数和析构函数构造函数成员数初始化列表析构函数成员逐一初始化构造函数和析构函数是针对类来说的,别在别的地方用!构造函数为什么会有构造函数呢,就是我们想初始化类里的数据成员,我们就需要**提供一个或者多个特别的初始化函数。**嗯?为什么是特别的初始化函数,请先放下疑惑,看看这个特别的初始化函数的解释。每次定义类对象的时候,调用特别的初始化函数进行处理...原创 2020-05-04 19:28:41 · 342 阅读 · 0 评论 -
Essential C++学习记录&笔记整理21(如何实现一个class)
这章第一节就,,,,比较生涩,慢慢接受吧。。。给代码解释一些东西,或许更清晰明了!如何实现一个class其实懂个框架就好,不要一口吃个胖子。一切都在注释里!练习4-1//stack.h文件#ifndef _STACK_H_#define _STACK_H_//头文件定义格式#include<string>//E:\STUDY\ConquerCPP\exercise4...原创 2020-05-02 17:12:45 · 186 阅读 · 0 评论 -
EssentialC++第三章课后习题+踩雷清单
先总结本章所学的知识。内容多,我给个目录第三章总结习题3-13-23-33-4第三章总结一开始学习了指针算术运算,知道了指针可以用下标运算符(如array[2])来取出其指向的元素,或者*(array+2)来取出其指向的元素,array++,*array++,都是指针的算术运算。然后就是了解泛型指针,泛型指针的定义是针对于容器的,必须是容器的定义格式::iterator指针名,如vec...原创 2020-04-27 22:48:18 · 566 阅读 · 0 评论 -
C++变量和对象的区别联系
对象和变量这两个概念莫要搞乱,颈是颈,椎是椎,虽然两者都对应着一块内存,但是从不同的角度去理解内存就会产生不同的意义。变量:所谓变量就是一种定义,通过定义编译器将会开辟一段空间,并将这段内存空间和这个变量的名字捆绑在一起。从这个意思去理解,其实说白了:变量名就是内存在代码中可视化的一个符号。也就是说,如inta,a只是内存中某段地址在代码中可视化的一个符号,a本身作为符号并不占用空间,占用空...转载 2020-04-27 14:40:01 · 407 阅读 · 0 评论 -
Essential C++学习记录&笔记整理20(使用Map、Set、如何使用Iterator Inserter和iostream Iterator)
使用MapMap的作用,体现在你想查询某个字眼(单词,或者从句子里切分出来的某一子字符串这样的东西等)的出现次数的时候(并加以分析时)可以使用。要包含头文件#include<map>,格式一般为map<key,value>前者是字眼,后者为该字眼出现次数。用法举例:#include<map>#include<string>map<s...原创 2020-04-27 10:58:12 · 214 阅读 · 0 评论 -
Essential C++学习记录&笔记整理19(使用泛型算法、如何设计一个泛型算法)
使用泛型算法使用泛型算法这一节都是介绍的有什么泛型算法,这个用搜索引擎查一查资料,然后书后面也有相应的资料,查阅一下即可。注意使用泛型算法要包含头文件#include<algorithm>如何设计一个泛型算法//目的:找出小于/大于某指定值的元素的值。#include<iostream>#include<vector>#include<a...原创 2020-04-26 17:35:50 · 168 阅读 · 0 评论 -
Essential C++学习记录&笔记整理18(所有容器的共同操作、使用顺序性容器)
所有容器的共同操作所有容器类及string类的共同操作==和!=运算符,返回true或false=运算符,将某个容器复制给另一个容器empty()会在容器无任何元素时返回true,否则返回falsesize()返回容器内目前持有的元素个数clear()删除容器的所有元素举个代码例子:void comp(vector<int>&v1,vector<int...原创 2020-04-22 21:08:06 · 199 阅读 · 0 评论 -
Essential C++学习记录&笔记整理17(了解Iterator(泛型指针))
这节第一次看自闭了 ,又看了一遍,照书上代码敲了敲补充了下细节,才算明白。了解Iterator(泛型指针)注:书上的代码在拼合的时候,有些细节没给出,也没有提醒,需要你自己悟出来或者搜索一下。直接以一份代码来说明这一节#include<iostream>#include<vector>#include<list>//这个头文件得写,因为你用到了lis...原创 2020-04-21 22:32:25 · 291 阅读 · 1 评论 -
Essential C++学习记录&笔记整理16(指针的算术运算)
终于来到了第三章,然而这一章第一二节看了就很让人劝退。。。很多细节书里没提导致我必须猜测或搜索才能让书里的代码运行起来。指针的算术运算所谓指针的算术运算,举个例子,可以是*(array+2);假设array所存储的元素类型为int,array+2就是array的地址(也是array首元素的地址)+array所存储的元素类型所占大小*2。换句话说,array所存储元素类型是int型,首元素地...原创 2020-04-21 21:41:57 · 182 阅读 · 0 评论 -
Essential C++第二章练习(又一次干货+注意事项的总结!)(2)
inline bool check_validity(int pos){ return (pos<=0||pos>64)?false:true;}//这是一个很简洁的代码,值得借鉴,记下!这里的异常处理做的很简洁,很清晰,值得借鉴const vector<int>* pentagonal_series(int pos){ static vecto...原创 2020-04-17 17:16:23 · 224 阅读 · 0 评论