条款十八:让接口容易被正确使用,不易被误用从本条款开始,就进入到全书的第四部分:设计与声明。程序员设计接口时应
原创 2023-06-02 00:10:06
99阅读
条款二十三:宁以non-member、non-friend替换member函数本条款还是讨论封装的问题,举书上的例子:class WebBrower{public: void ClearCach(); void ClearHistory(); void RemoveCookies();};定义了一个WebBrower的类,里面执行对浏览器的清理工作,包...
原创 2023-06-01 17:18:52
74阅读
本节条款的题目:请使用trait classes来表示类型信息 本节条款主要讲述的技术是怎样在编译期间实现对迭代器类型的推断,依据推断的类型进行最优处理。 我们先来看一下迭代器的种类: 1.input_iterator:仅仅读,仅仅能逐个前移 2.output_iterator:仅仅写,仅仅能逐个前
转载 2017-05-02 14:30:00
189阅读
2评论
条款1:尽量用const和inline而不用#define 1.   #define max(a,b) ((a) > (b) ? (a) : (b)) inline int max(int a, int b) { return a > b ? a : b; } 不过这和上面的宏不大一样,因为这个版本的max只能处理int类型。但模板可以很轻巧地解决这个问题:
原创 2012-07-11 07:57:33
458阅读
1.随着多态基类应该声明一个质virtual析构函数. 假定class由于不管是什么virtual析构函数, 它应该有一个virtual析构函数. 2.classed的设计目的假设不是作为base classed使用, 或不是为了具备多态性, 就不应该声明virtual析构函数. #include <iostream> using namespace std; class
转载 2015-10-18 20:43:00
75阅读
2评论
本节条款:须要类型转换时请为模板定义非成员函数 这节知识是在条款24的基础上,讲述的有关非成员函数在模板类中(non-member function template)的作用。 我们先看一下条款24讲述的知识核心。条款24讲述了我们怎样能实现类的对象在特定条件下的隐式转换问题。 我们先看以下代码:
转载 2017-08-20 12:35:00
121阅读
2评论
我从本条款中学到了下面内容: 1.private继承不同于另外两种继承,派生类对象不能隐式转换为基类对象。例如以下代码: class Bird//鸟 { }; class ostrich:private Bird//鸵鸟 { }; int main() { Bird *b = new ostrich
转载 2016-02-16 15:18:00
68阅读
宁non-member、non-friend顶替member性能 本节介绍笔者为什么时间来实现某些功能。择非成员函数而且是非友元函数。这样做总结一句话,就是最大限度的实现类的封装性。 封装意味着不可见。 愈多东西被封装。欲少人能够看到它,我们就有愈大的弹性去改变它。愈少代码能够看到数据(訪问数据),愈多数据可被封装,我们就更有自由来改变对象数据。愈多函数能够訪问它,数据的
转载 2015-10-27 18:14:00
142阅读
2评论
本节条款的题目是运用成员模板接受全部兼容类型 作者阐述自己的观点是通过智能指针的样例。 在学习本节条款之前我们要先明确关于隐式转化的问题 例如以下代码: #include<iostream> using namespace std; class A { public: explicit A(int
转载 2016-04-06 12:05:00
126阅读
2评论
条款三十四:区分接口继承和实现继承这个条款书上内容说的篇幅比较多,但其实思想并不复杂。只要能理解
原创 2023-06-01 17:30:47
65阅读
在operator=中处理“自我赋值” 什么是自我赋值,非常明显。就是自己的值赋值给了自己。以下的代码就是自我赋值: class Widget { public: Widget& operator=(const Widget& rhs) { delete p; p=new int(ths.p); r
转载 2016-02-21 11:25:00
181阅读
2评论
若全部參数皆需类型转换,请为此採用non-member函数我们直奔主题 假设你定义一个有理数类例如以下class Rational{public: Rational(int numerator=0, int denominator=1);//非explicit。同意隐式转换 ...
转载 2015-12-26 10:05:00
117阅读
2评论
如题目,我们自己的程序接口是面向用户的,程序的目的不可是解决这个问题,并且要让用户easy使用。所以。必须保证我们的程序接口具有非常强的鲁棒性。 怎么保证接口的鲁棒性,不同情况有不同的处理结果,作者列出了以下几个样例所相应的方法。 1.设计一个class来表示日期 以上的构造接口非常easy被用户用
转载 2016-03-13 17:30:00
122阅读
2评论
以对象管理资源 资源的种类非常多,动态分配的内存、文件描写叙述器、相互排斥锁、图像界面中画刷、数据库连接、网络socket等。 资源通常是有限的。当你不用时,必须释放。不然就会造成资源浪费。更严重的情况下,非法占有全部资源导致程序崩溃。 那么我们怎么样才干合理使用资源?换句话说我们应该怎么样才干做到资源的释放? 本节的核心点是:利用析构函数自己主动调用机制实现资源的合理释
转载 2017-06-16 14:13:00
91阅读
2评论
在资源管理器中小心copying行为 上节是对资源的管理说明。有时候我们不能依赖于shared_ptr或者auto_ptr,所以我们须要自己建立一个资源管理类来管理自己的资源。 比如建立一个类来管理Mutex锁。如今使用函数处理类型为Mutex的相互排斥器对象 class Lock{ public:
转载 2017-08-13 10:35:00
182阅读
2评论
条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数,这笔开销还是很大的。现在的新编译器已经可以对这种情况进行优化了,甚至优化到连开销都没有,只是有...
转载 2015-11-16 18:36:00
120阅读
2评论
条款四十二:了解typename的双重意义顾名思义,typename有双重含意。只要你用过template,那么第一重含意一定知道,那就是声明模板的时
原创 2023-06-01 17:19:09
43阅读
条款11:在operator=中处理“自我赋值”自我赋值有时候不是那么明显,在
原创 2023-07-20 16:18:23
0阅读
条款05:了解C++默默编写并调用哪些函数编译器可以暗自为class创建def
原创 2023-07-20 16:12:41
44阅读
条款46请输入转换的时候,需要定义非模板成员函数条款47请使用traits class表现类型信息条款46:须要类型转换时请为模板定义非成员函数条款 24提到过为什么non-member函数才有能力“在全部实參身上实施隐式类型转换”。本条款接着那个Rational样例来讲。把Rati...
转载 2015-09-26 13:18:00
106阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5