- 博客(19)
- 收藏
- 关注

原创 C++条款:复制对象时应事无巨细 3/55
复制对象时应事无巨细Copy allparts of an object如果你声明自己的copy函数,意思就是告诉编译器你并不喜欢缺省实现中的某些行为。编译器仿佛被冒犯似的,会以一种奇怪的方式回敬:当你的实现代码几乎必然出错时却不告诉你。考虑一个class用来表现顾客,其中手工写出copy函数,使得外界对他们的调用会被记录下来(logged)void logCall(const...
2019-03-25 18:47:39
238

原创 C++条款 2/54
条款02 尽量以const,enum,inline替换#define“宁可以编译器替换预处理器”比较好预处理器:最常见为C预处理器,采用"#"为行首的指示,根据用户定义的规则,进行简单的词法单元替换。典型的词法预处理器产生宏替换,包含其他文件的文本,并且条件性地编译或者包含文件。当你做出#define ASPECT_RATIO 1.653意味着所有的ASPECT_RATIO 都...
2019-03-24 09:45:30
310
原创 C++条款 宁以non-member、non-friend替换menber函数 14/55
宁以non-member、non-friend替换menber函数Prefer non-member non-friend functions to member functions想想有个class用来表示网页浏览器。在这个class可能提供的众多函数中,有一些用来清除下载元素高速缓冲区、清除访问过的URLs的历史记录、以及移除系统中的所有cookies:class WebBrow...
2019-04-09 21:00:46
446
原创 C++条款 将成员变量声明为private 13/55
将成员变量声明为privateDeclare date members private首先带你看看为什么成员变量不该是public,然后让你看看所有反对public成员变量的论点同样适用于protected成员变量。最后导出一个结论:成员变量应该是private。获得这个结论,本条款就大功告成了。让我们从语法一致性开始。如果成员变量不是public,客户唯一能够访问对象的办法就是通过成...
2019-04-06 16:11:20
274
原创 C++条款 必须返回对象时,别妄想返回其reference 12/55
必须返回对象时,别妄想返回其referenceDon't try to return a reference when you musst return an object一旦程序员领悟了pass-by-value的效率牵连层面,往往变成十字军战士,一心一意根除pass-by-value带来的种种邪恶。在坚定追求pass-by-reference的纯度中,他们一定会犯下一个致命错误:开始传...
2019-04-06 14:41:06
254
原创 C++条款 宁以pass-by-reference-to-const替换pass-by-value 11/55
宁以pass-by-reference-to-const替换pass-by-valuePrefer pass-by-referenct-to-const to pass-by-value缺省情况下C++以by value方式传递对象至(或来自)函数。除非你另外指定,否则函数参数都是以实际实参文件的复件为初值,而调用端所获得的亦是函数返回值的一个复件。这些复件由对象的copy构造函数产出,这...
2019-04-03 21:01:41
225
原创 C++条款 设计class犹如设计type 10/55
设计class犹如设计typeTreat class design as type designC++就像在其他OOP(面向对象编程)一样,当你定义一个新class,也就定义了一个新type。身为C++程序员,你的许多时间主要用来扩张你的类型系统(type syetem)。这意味着你并不只是class设计者,还是type设计者。重载(overloading)函数和操作符、控制内存的分配和归...
2019-04-02 19:02:44
200
原创 C++条款 让接口容易被正确使用,不易被误用 9/55
让接口容易被正确使用,不易被误用Make interfaces easy to use correctly and hard to use incorrectly若客户企图把事情做好,他们想要正确使用你的接口,这种情况下如果他们对任何其中一个接口的用法不正确,你至少也得负一部分责任。欲开发一个“容易被正确使用,不易被误用”的接口,首先必须考虑客户可能做出什么样的错误。假设你为一个用来表现日...
2019-04-01 21:33:50
215
原创 C++条款 以独立的语句将newed对象置入智能指针 8/55
以独立的语句将newed对象置入智能指针Store newed objects in smartpointers in standalone statements假设我们有个函数用来揭示处理程序的优先权,另一个函数用来在某动态分配所得的Widget上进行某些带有优先权的处理:int priority();void processWidget(std::tr1::shared_...
2019-03-31 13:03:25
151
原创 C++条款:成对使用new和delete时要采取相同形式 7/55
成对使用new和delete时要采取相同形式Use the same form in corresponding uses of new and delete先思考:以下动作有什么错?std::string* stringArray = new std::string[100];...delete stringArray;看起来井然有序,使用了new,也搭配了delete。但...
2019-03-29 20:13:48
176
原创 C++条款 在资源管理类中提供对原始资源的访问 6/55
在资源管理类中提供对原始资源的访问Provide access to raw resources in resource-managing classes资源管理类很值得我们去使用,是我们对抗资源泄漏的堡垒。排除此等泄漏是良好设计系统的根本性质。但尽管如此,仍有很多APIs直接指涉资源,所以除非你永不录用这样的APIs,否则只得绕过资源管理对象直接访问原始资源。举个例子,之前的条款...
2019-03-28 21:15:31
301
原创 C++条款 在资源管理类中小心copying行为
在资源管理类中小心copying行为Think carefully about copying behavior in resource-managing classes上个条款中,我们导入这样的观念:“资源取得时机便是初始化时机”(RAII),也描述了auto_ptr和tr1::shared_ptr如何将这个观念表现在heap-based资源上。然而并非所有资源都是heap-based,...
2019-03-27 20:54:47
308
原创 C++条款:以对象管理资源 4/55
以对象管理资源Use objects to manage resources假设我们使用一个用来塑模投资行为(股票、债券等等)的程序库,其中各式各样的投资类型继承自一个root class Investment:class Investment{...}这个程序库通过一个工厂函数(factory function)供应我们某特定的Investment对象:Investmen...
2019-03-26 16:25:13
153
原创 函数探幽(3) --引用(3)
3.1.将引用用于结构 引用非常适合用于结构和类,而引入引用的目的也是为了用于这些类型。 有如下结构定义:struct free_throws{ std;;string name; int made; int attempts; float percent;};//则可以这样编写函数原型:void set_pc(free_throws & ft);//如
2017-11-07 22:05:23
490
4
原创 函数探幽(2) --引用(2)
2.1.1.将引用用作函数参数 与按值传递不同的是,传递引用,函数将可以使用原始数据,似乎与传递指针有着相同的作用。int wallet1 = 400;int wallet2 = 500;cout<<"wallet1 = $"<<wallet1;cout<<"wallet2 = $"<<wallet2<<endl;swap(wallet1, wallet2); //调用cout<
2017-11-06 15:31:59
285
原创 函数探幽(1) --引用(1)
1.引用变量 引用是已定义的变量的别名(另一个名称)。如:有一变量x,而y作为变量x的引用,则可以交替使用x和y来表示该变量。就像有两个单词表示同一个意思。1.1.1.创建引用变量 在c++中,&符号除了用来指示变量的地址外,&的另一个含义就是用来声明引用。例:int cats;int & tomcats =cats;其中,&不是地址运算符,而是类型标识符的一部分。上述
2017-11-03 22:53:30
350
原创 浅析指针与const
* const用于指针有着一些微妙的地方,也有着比较复杂,短时间难以理解的地方,所以就此详细探讨一番。让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值 int age=39;const int * pt = &age; *pt的值为const,对pt而言,这个值(age)是常量,但并不意味着它所指向的值就是一个常量,可以通过修改age变量来修改age的值。 这
2017-10-02 09:53:41
442
原创 浅谈模板类vector和array
在这里对模板类做非常非常简单的总结,以便于自己需要时有货可查。模板类vector ① 是一种动态数组,可在运行阶段设置vector对象的长度,也可以在末尾添加数据,在中间插入数据 ② 使用new和delete来管理内存,但是是自动执行这两个操作的。 ③ 必须 #include<vector> 和包含在名称空间std中 ④ 简单使用:vector<typeName> vb(n_elem);
2017-09-11 23:22:32
560
原创 C++文件读写操作(一) 逐字符读取文件
//1.打开一个文件//2.逐个字符地读取该文件,直到文件末尾//3.指出该文件中包含多少个字符#include<iostream>#include<fstream>#include<cstdlib>const int Arsize = 60;int main() { using namespace std; char c, fileName[Arsize];
2017-09-08 19:39:33
20956
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人