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

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

原创 C++条款 2/54
条款02 尽量以const,enum,inline替换#define “宁可以编译器替换预处理器”比较好 预处理器:最常见为C预处理器,采用"#"为行首的指示,根据用户定义的规则,进行简单的词法单元替换。典型的词法预处理器产生宏替换,包含其他文件的文本,并且条件性地编译或者包含文件。 当你做出 #define ASPECT_RATIO 1.653 意味着所有的ASPECT_RATIO 都...
2019-03-24 09:45:30
323
原创 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
455
原创 C++条款 将成员变量声明为private 13/55
将成员变量声明为private Declare date members private 首先带你看看为什么成员变量不该是public,然后让你看看所有反对public成员变量的论点同样适用于protected成员变量。最后导出一个结论:成员变量应该是private。获得这个结论,本条款就大功告成了。 让我们从语法一致性开始。如果成员变量不是public,客户唯一能够访问对象的办法就是通过成...
2019-04-06 16:11:20
284
原创 C++条款 必须返回对象时,别妄想返回其reference 12/55
必须返回对象时,别妄想返回其reference Don'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
264
原创 C++条款 宁以pass-by-reference-to-const替换pass-by-value 11/55
宁以pass-by-reference-to-const替换pass-by-value Prefer pass-by-referenct-to-const to pass-by-value 缺省情况下C++以by value方式传递对象至(或来自)函数。除非你另外指定,否则函数参数都是以实际实参文件的复件为初值,而调用端所获得的亦是函数返回值的一个复件。这些复件由对象的copy构造函数产出,这...
2019-04-03 21:01:41
233
原创 C++条款 设计class犹如设计type 10/55
设计class犹如设计type Treat class design as type design C++就像在其他OOP(面向对象编程)一样,当你定义一个新class,也就定义了一个新type。身为C++程序员,你的许多时间主要用来扩张你的类型系统(type syetem)。这意味着你并不只是class设计者,还是type设计者。重载(overloading)函数和操作符、控制内存的分配和归...
2019-04-02 19:02:44
218
原创 C++条款 让接口容易被正确使用,不易被误用 9/55
让接口容易被正确使用,不易被误用 Make interfaces easy to use correctly and hard to use incorrectly 若客户企图把事情做好,他们想要正确使用你的接口,这种情况下如果他们对任何其中一个接口的用法不正确,你至少也得负一部分责任。欲开发一个“容易被正确使用,不易被误用”的接口,首先必须考虑客户可能做出什么样的错误。假设你为一个用来表现日...
2019-04-01 21:33:50
226
原创 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
162
原创 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
184
原创 C++条款 在资源管理类中提供对原始资源的访问 6/55
在资源管理类中提供对原始资源的访问 Provide access to raw resources in resource-managing classes 资源管理类很值得我们去使用,是我们对抗资源泄漏的堡垒。排除此等泄漏是良好设计系统的根本性质。 但尽管如此,仍有很多APIs直接指涉资源,所以除非你永不录用这样的APIs,否则只得绕过资源管理对象直接访问原始资源。 举个例子,之前的条款...
2019-03-28 21:15:31
312
原创 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
319
原创 C++条款:以对象管理资源 4/55
以对象管理资源 Use objects to manage resources 假设我们使用一个用来塑模投资行为(股票、债券等等)的程序库,其中各式各样的投资类型继承自一个root class Investment: class Investment{...} 这个程序库通过一个工厂函数(factory function)供应我们某特定的Investment对象: Investmen...
2019-03-26 16:25:13
160
原创 函数探幽(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
508
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
294
原创 函数探幽(1) --引用(1)
1.引用变量 引用是已定义的变量的别名(另一个名称)。如:有一变量x,而y作为变量x的引用,则可以交替使用x和y来表示该变量。就像有两个单词表示同一个意思。1.1.1.创建引用变量 在c++中,&符号除了用来指示变量的地址外,&的另一个含义就是用来声明引用。例:int cats; int & tomcats =cats;其中,&不是地址运算符,而是类型标识符的一部分。上述
2017-11-03 22:53:30
356
原创 浅析指针与const
* const用于指针有着一些微妙的地方,也有着比较复杂,短时间难以理解的地方,所以就此详细探讨一番。 让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值 int age=39; const int * pt = &age; *pt的值为const,对pt而言,这个值(age)是常量,但并不意味着它所指向的值就是一个常量,可以通过修改age变量来修改age的值。 这
2017-10-02 09:53:41
451
原创 浅谈模板类vector和array
在这里对模板类做非常非常简单的总结,以便于自己需要时有货可查。 模板类vector ① 是一种动态数组,可在运行阶段设置vector对象的长度,也可以在末尾添加数据,在中间插入数据 ② 使用new和delete来管理内存,但是是自动执行这两个操作的。 ③ 必须 #include<vector> 和包含在名称空间std中 ④ 简单使用:vector<typeName> vb(n_elem);
2017-09-11 23:22:32
577
原创 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
20993
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人