![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 65
爱拍球的程序圆
保持简单,不管是生活还是程序。编程、打球、阅读,生活中有这三件事不是已经很足够了吗?
展开
-
《Effective C++》重点摘要(四)
《Effective C++》第四章:设计与声明让接口容易被正确使用,不易被误用。一个接口由返回类型、接口名称、和参数列表组成,为了让接口容易被正确的使用,需要小心设计返回类型,最好是简单、直接、自然。接口名称选择很重要,做到简单、达意、无歧义。参数列表形参类型需要身份小心,如果能防范非法输入,尽力为之,形参名也尽可能做到同接口名称一样的标准。另外请保持命名习惯的一致性也能收到奇效。设计clas原创 2015-04-21 15:20:03 · 593 阅读 · 0 评论 -
C++多态的实现
C++的魔力在C++中,通过继承,子类可以获得父类的成员,通过多态,C++可以实现在运行期根据对象的实际类型调用正确的虚函数,C++还有C语言不能做到的重载行为…C++的这种魔力是怎么实现的呢? 实际上,C++是使用C语言作为代码生成语言的,就好像当写完一个C++程序时,C++预处理器先将C++代码转化为C语言代码,然后再由C语言编译器生成可执行文件一样。当使用继承时,子类获得父类的成员并不是C+原创 2015-04-27 08:37:24 · 1118 阅读 · 0 评论 -
《More Effective C++》重点摘要二:操作符
对定制的“类型转换函数”警觉。两种函数允许编译器执行类型转换:1)单变量constructors;2)隐式类型转换操作符。第一种函数可以是明确只有一个单变量的constructor,也可以是拥有除第一个参数外其他参数有默认值的constructor。当编译器发现需要某个类型的对象而实际得到的对象类型不匹配时,它会尽力搜索一种能够执行转换的方式,这个时候以得到的实际类型对象为参数的单变量constru原创 2015-04-26 09:41:11 · 615 阅读 · 0 评论 -
《Effective C++》重点摘要(一)
开篇的话这个星期不再发布关于数据结构的博客,想把半个月来看的书做一些总结,整理整理,第一本就是《Effective C++》。第一次看这本书是一年多前,准备考研复试的时候,随后陆陆续续,这个月再来看算是第三遍了吧,之前没有看过《深度探索C++对象模型》,所以有的地方看得不是很透彻(现在有的地方也看得不透,但是比以前好点了)。还有另一本书就是《深度探索C++对象模型》,看第二遍,吸收得更容易了,看书总原创 2015-04-21 09:53:41 · 727 阅读 · 0 评论 -
《Effective C++》重点摘要(三)
《Effective C++》第三章:资源管理以对象管理资源。一份资源,可能是一片内存,可能是一个锁,当客户申请后需要手动释放才是合理的,那么最好在获得这份资源的时候,就立刻把它放到一个对象里(RAII技术),然后在对象的析构函数里释放它。这样释放操作就不会被遗忘了,并且,就算在使用资源类的语境中有语句抛出异常,也能确保资源得到正确的释放。在资源管理类中小心coping行为。有的资源是不支持co原创 2015-04-21 10:20:03 · 582 阅读 · 0 评论 -
《Effective C++》重点摘要(二)
《Effective C++》第二章:构造/析构/赋值运算C++默认编写的函数。C++编译器如果没有发现以下函数,就会为类生成一份默认版本的: 1) default构造函数 2) default析构函数 3) copy构造函数 4) copy assignment操作符(=运算符) 前两个函数并不总是产生,它只在编译器需要的时候才产生出来。后两个函数只保证以bitwise语义拷贝原创 2015-04-21 10:10:40 · 582 阅读 · 0 评论 -
《Effective C++》重点摘要(九)
《Effective C++》第九章:杂项讨论不要轻忽编译器的警告。严肃对待编译器发出的警告信息。努力在最高警告级别下争取无警告。也不要过度依赖编译器给出的警告信息,不同的编译器给出的警告信息是不一样的,甚至给出警告的点也不一样。让自己熟悉包括TR1在内的标准程序库。让自己熟悉Boost。C++不想Java和C#那样,语言本身就带有很强大的库,所以外部的程序库对于编写C++程序至关重要。俗话原创 2015-04-24 09:16:11 · 620 阅读 · 0 评论 -
《More Effective C++》重点摘要一:基础议题
仔细区别pointers和references。指针和引用有些相似,他们本身都是对存在于某个地方的对象(不是指class)的指示,但是他们有着本质的区别。指针变量存储所指对象的地址,所指的对象可以是null,只要可以寻址就行。而引用是某个已经存在对象的别名,所以不可以先声明一个引用,经过一段时间(代码)后让它指向某个对象。最好使用C++转型操作符。C++提供了自己的四种转型操作符: 1) st原创 2015-04-24 15:13:40 · 674 阅读 · 0 评论 -
《Effective C++》重点摘要(八)
《Effective C++》第八章:定制new和delete了解new-handler的行为。new和delete不是函数,是申请和释放内存的操作符。当new提出获得内存申请失败时会发生什么?老旧的编译器是返回null指针。现在呢,如果申请失败,会先调用一个错误处理函数,那就是new-handler。这就像一个回调函数,系统有一个默认的,用户也可以自行编写一个错误处理函数并使用set_new_h原创 2015-04-24 08:43:26 · 586 阅读 · 0 评论 -
每日一题23:查找树基本操作
距离上一篇博客已经过去了四天,“每日一题”这个标题给的压力还是挺大的,这四天一直在学习查找树,同时更进一步地接触STL,所以更新慢了。查找树的删除操作整整花了一天才学会,比较耗时,另外两个有点麻烦的地方是迭代器的前进与后退,需要画图再根据查找树的性质推理。这三个操作算得上两个题吧,整个查找树操作算得上一个题,这样想想,嗯,勉强对得起标题啦,O(∩_∩)O。好了,闲话少说,上代码,吸取了以前的教训,原创 2015-04-19 16:26:19 · 534 阅读 · 0 评论 -
每日一题22:Deque与Trait
虽然之前写过一个Deque,但是那个属于C与C++混合的产品,近来在学习C++模板,所以写了一个C++版,同时第一次尝试使用Trait技术。 本来已经写好的文章,发表之后丢失了,好郁闷,没心情再写了,贴贴代码吧。这个Trait是用来决定传递参数时是使用值传递还是引用传递#ifndef _TYPE_TRAITS_H_#define _TYPE_TRAITS_H_namespace MyDataSt原创 2015-04-15 10:35:55 · 1009 阅读 · 0 评论 -
《Effective C++》重点摘要(七)
《Effective C++》第七章:模板与泛型编程了解隐式接口和编译期多态。面向对象编程总是采用显式地声明一个接口,并在子类中提供特殊的实现,进而实现运行期多态。模板类中的接口往往是隐式的,隐式的意思是,编写模板时,假设需要的接口类T中是存在的,至于实例化模板的类是否真的具有该接口,编译时才知道(如果实例化类型没有实现这些接口,则编译失败)。这正是模板多态的展现方式,由实例化模板的类决定具体的行原创 2015-04-23 15:55:38 · 700 阅读 · 0 评论 -
每日一题20:与C++11的第一次邂逅——可变参模板与C#委托模拟
这篇文章本来是前天发的,但是不知道为什么CSDN上没有显示,可能是我没发,记错了。又由于没有留底稿,还是重写一下吧,也为知己不留底稿的恶习做个标记。 之所以接触C++11是因为自己前天突发奇想想用C++来模拟一下C#里的委托,但是尝试过很多方法和各种搜索后,知道之前的C++是不支持模板重载的,所以不可能通过编写多种版本的模板来实现变参的效果,如果使用《C++设计新思维》里的TypeList方式的话原创 2015-04-11 11:01:29 · 983 阅读 · 0 评论 -
宁以non-member且non-friend替换member函数
这样做的第一个理由是增加封装性,咳咳,这听起来有点矛盾,因为non-member且non-friend成员函数要想处理某个类中的数据的话,就得看到(即能访问)该类中的数据,那么数据就得是public的。这明显破坏了封装。嗯,解释一下,不是每个函数都要明确看到数据才能处理,它可以调用类中的一序列public函数来完成任务,这些public函数可以明确地看到类中的数据,如果我们把调用他们的函数作为mem原创 2015-04-22 19:28:31 · 764 阅读 · 0 评论 -
《Effective C++》重点摘要(六)
《Effective C++》第六章:继承与面向对象设计确定你的public继承塑模出is-a关系。student is a person,所以student可以public继承自person。概念上,正方形是长方形,但是如果让square继承自rectangle呢,square需要像rectangle那样具有长和宽两个成员变量吗?如果是,每次改变正方形的宽的时候,也要改变正方形的长,这很奇怪不是原创 2015-04-22 14:21:39 · 572 阅读 · 0 评论 -
《Effective C++》重点摘要(五)
《Effective C++》第五章:实现尽可能延后变量定义式的出现时间。只有变量在恰好要使用之前定义,程序的可读性往往会得到提高,因为这样不容易忘记变量说代表的意思。另一方面,这样做可以提高程序性能,如果不需要一个变量时却要为它分配、释放空间,调用构造、析构函数,获取、释放资源……这,真是太浪费了。补充一点,声明式并不会做这些事情,所以可以考虑用声明式替换定义式以尽量延后变量的定义。尽量少做转原创 2015-04-22 07:48:54 · 606 阅读 · 0 评论 -
每日一题25:Hoffman树
Hoffman树是由David A. Hoffman于1952年在MIT攻读博士学位期间发表的论文《A Method for the Construction of Minimum-Redundancy Codes》中提出的,它的目的寻找一种利用最少量的编码方法表示信息。Hoffman使用自底向上的方法构建了一棵满足要求的树,用这棵树进行的编码叫做Hoffman编码。 用一个节点表示一条信息,每条原创 2015-05-19 15:45:27 · 698 阅读 · 0 评论