C++
文章平均质量分 78
pandawuwyj
这个作者很懒,什么都没留下…
展开
-
Effective C++读书笔记(5)
条款07:为多态基类声明virtual析构函数Declare destructors virtual inpolymorphic base classes建立一个 TimeKeeper基类,并为不同的计时方法建立派生类:class TimeKeeper {public:TimeKeeper();virtual ~TimeKeeper();...};class A原创 2012-01-21 18:38:11 · 438 阅读 · 0 评论 -
Effective C++读书笔记(19)
条款30:透彻了解inlining的里里外外Understand the ins and outs of inlininginline函数看起来像函数,产生的效果也像函数,比宏好得多,而你却可以在调用它们时不招致函数调用的成本。实际上你得到的可能比你想的更多,因为避免函数调用的成本只是inline好处的一部分。当你 inline 化一个函数,编译器或许有能力对函数本体执行语境相关最优化。原创 2012-02-07 21:54:59 · 608 阅读 · 0 评论 -
Effective C++读书笔记(20)
条款31:将文件间的编译依存关系降至最低Minimize compilation dependencies betweenfiles假设你对一个类的实现进行了细微的改变。提醒你一下,不是类的接口,只是实现,仅仅是 private 的东西。然后你重建(rebuild)这个程序,在 Build上点击或者键入 make(或者其它等价行为),接着你突然意识到整个程序都被重新编译和连接!问题原创 2012-02-08 23:22:45 · 805 阅读 · 0 评论 -
Effective C++读书笔记(21)
昨天颓废了 今天*2条款32:确定你的public继承塑模出is-a关系Make sure public inheritance models “is-a”使用C++语言进行面向对象编程时最重要的规则就是:publicinheritance意味着"is-a"关系。如果令class D ("Derived") 从 class B ("Base") public继承,就是在告诉原创 2012-02-10 23:44:00 · 842 阅读 · 0 评论 -
Effective C++读书笔记(22)
条款34:区分接口继承和实现继承Differentiate between inheritance ofinterface and inheritance of implementationpublic inheritance是由两个相互独立的部分组成的:inheritance of function interfaces(函数接口继承)和 inheritanceof function i原创 2012-02-10 23:45:07 · 800 阅读 · 0 评论 -
一个十位数由0-9数字组成并前N位被N整除
题目:请将0123456789十个数字以特定的顺序排列,组成一个10位数ABCDEFGHIJ(每个数字只能使用一次),使得:1.第一位数字组成的整数可以被1整除2.第一、二位数字组成的整数可以被2整除3.第一、二、三位数字组成的整数可以被3整除4.第一、二、三、四位数字组成的整数可以被4整除......10.第一、二、三...十位数字组成的整数可以被10整除 分原创 2012-02-24 03:37:38 · 4878 阅读 · 0 评论 -
Effective C++读书笔记(23)
条款35:考虑virtual函数以外的其他选择Consider alternatives to virtual functions现在你正在写一个视频游戏,在游戏中为角色设计了一个继承体系。你决定提供一个成员函数healthValue,它返回一个表示角色健康状况如何的整数。因为不同的角色计算健康值的方法可能不同,将healthValue声明为 virtual似乎是显而易见的设计选择:c原创 2012-02-11 23:58:13 · 939 阅读 · 0 评论 -
Effective C++读书笔记(24)
条款36:绝不重新定义继承而来的non-virtual函数Never redefine an inherited non-virtualfunction有如下代码:class B {public: void mf(); ...};class D: public B { ... };虽然我们对B,D或mf一无所知,但面对一个类型为D的对象x:D x原创 2012-03-08 23:29:05 · 760 阅读 · 0 评论 -
Effective C++读书笔记(25)
条款38:通过复合塑模出has-a或“根据某物实现出”Model “has-a” or “is-implemented-in-terms-of”through composition复合(composition)是类型之间的一种关系,当某种类型的对象内含另一种类型的对象,便是这种关系。例如:classAddress { ... }; // 某人的住址classPhoneNumber原创 2012-04-01 00:11:14 · 958 阅读 · 0 评论 -
Effective C++读书笔记(26)
条款40:明智而审慎地使用多重继承Use multiple inheritance judiciously触及multiple inheritance (MI)(多继承)的时候,C++ 社区就会鲜明地分裂为两个基本的阵营。一个阵营认为如果single inheritance (SI)(单继承)是有好处的,multiple inheritance(多继承)一定更有好处。另一个阵营认为sing原创 2012-04-01 23:25:59 · 832 阅读 · 0 评论 -
Effective C++读书笔记(27)
条款41:了解隐式接口和编译期多态Understand implicit interfaces andcompile-time polymorphism面向对象编程以显式接口和运行期多态为中心。例如:class Widget {public: Widget(); virtual ~Widget(); virtual std::size_t size()原创 2012-04-04 00:19:14 · 1070 阅读 · 0 评论 -
Effective C++读书笔记(28)
条款43:学习处理模板化基类内的名称Know how to access names in templatizedbase classes假设我们要写一个应用程序,它可以把消息传送到几个不同的公司去,消息既可以以加密方式也可以以明文(不加密)的方式传送。如果我们有足够的信息在编译期间确定哪个消息将要发送给哪个公司,我们就可以采用基于模板的解法:class CompanyA {pub原创 2012-04-20 23:44:20 · 893 阅读 · 0 评论 -
Visual Studio:error MSB8020
状况如下:error MSB8020: The builds tools for v120 (Platform Toolset = 'v120') cannot be found. To build using the v120 build tools, either click the Project menu or right-click the solution, and t原创 2013-12-07 20:38:17 · 73113 阅读 · 12 评论 -
小记5.8面试
void Foo(int i){coutvoid Foo(int* i){coutvoid Foo(int** i){coutvoid Bar(int& i) // 别名{Foo(i); // 1int* j = (int*)&i;// j是指向i的指针,地址Foo(j); // 2Foo(*j); // *j = i,1Foo(&j);原创 2014-05-09 00:31:30 · 966 阅读 · 0 评论 -
《深入理解计算机系统》(1)
typedef unsigned char* byte_pointer;void show_bytes(byte_pointer start, int len){for (int i = 0; i {printf("%2x", start[i]);}cout}int _tmain(int argc, _TCHAR* argv[]){char* b原创 2014-06-03 23:03:48 · 1444 阅读 · 0 评论 -
看书小记9(《C专家编程》)
哈希表简单实现,练个手#include "stdafx.h"#include using namespace std;#define HASHSIZE 12typedef struct HashTable{int *elem;int count;}HashTable;int m = 0;void Print(HashTable*原创 2014-05-24 22:03:51 · 813 阅读 · 0 评论 -
Effective C++读书笔记(18)
条款29:为“异常安全”而努力是值得的Strive for exception-safe code假设我们有一个类,代表带有背景图像的GUI菜单。这个类被设计成在多线程环境中使用,所以它有一个用于并行控制(concurrencycontrol)的互斥体(mutex):class PrettyMenu {public:void changeBackground(std::istr原创 2012-02-06 19:38:13 · 577 阅读 · 0 评论 -
Effective C++读书笔记(17)
条款27:尽量少做转型动作(2)Minimize casting不要认为强制转换除了告诉编译器将一种类型看作另一种之外什么都没做,任何种类的类型转换(无论是通过强制转换的显式还是编译器添加的隐式)都会导致运行时的可执行代码。例如: intx, y;double d = static_cast(x)/y; // x除以y,使用浮点数除法int到double的强制转换理所当然原创 2012-02-05 23:36:44 · 621 阅读 · 0 评论 -
Effective C++读书笔记(15)
条款25:考虑写出一个不抛异常的swap函数Consider support for a non-throwing swapswap是一个有趣的函数。最早作为STL的一部分被引入,后来它成为异常安全编程(exception-safeprogramming)的支柱,和用来处理自我赋值可能性的常见机制。因为 swap太有用了,所以正确地实现它非常重要,但是伴随它不同寻常的重要性而来的,是一系列原创 2012-02-03 22:59:31 · 729 阅读 · 0 评论 -
Effective C++读书笔记(4)
条款05:了解C++默默编写并调用哪些函数Knowing what functions C++ silentlywrites and calls一个 emptyclass(空类)什么时候将不再是 empty class(空类)?答案是当 C++ 处理过它之后。如果你自己不声明一个拷贝构造函数,一个 copyassignment运算符和一个析构函数,编译器就会声明一个它自己的版本。此外,原创 2012-01-20 16:49:49 · 595 阅读 · 0 评论 -
Effective C++读书笔记(3)
条款04:确定对象被使用前已先被初始化Make sure that objects are initializedbefore they're used.关于"将对象初始化"这事,C++ 似乎反复无常。在某些语境下内置类型和类的成员变量保证被初始化,但在其他语境中却不保证。读取未初始化的值会导致不明确的行为。它可能让你的程序终止运行,可能污染了正在进行读取动作的那个对象,可能导致不可测原创 2012-01-19 22:58:17 · 553 阅读 · 0 评论 -
Effective C++读书笔记(8)
条款12:复制对象勿忘其每一个成分Copy all parts of an object设计良好的面向对象系统中,封装了对象内部,仅留两个函数用于对象的拷贝:拷贝构造函数和拷贝赋值运算符,统称为拷贝函数。编译器生成版的copy函数会拷贝被拷贝对象的所以成员变量。考虑一个表现顾客的类,这里的拷贝函数是手工写成的,以便将对它们的调用志记下来:void logCall(const std原创 2012-01-27 23:41:43 · 460 阅读 · 0 评论 -
Effective C++读书笔记(2)
条款03:尽可能使用constUse const whenever possible. const允许你告诉编译器和其他程序员某值应该保持不变。 如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。1. char greeting[] = "Hello";原创 2012-01-18 22:27:08 · 520 阅读 · 0 评论 -
Effective C++读书笔记(6)
新年了~忙着东奔西跑3天,是时候回归正常生活了……条款08:别让异常逃离析构函数Prevent exceptions from leavingdestructorsC++ 不禁止但不鼓励从析构函数引发异常。考虑:class Widget {public: ... ~Widget() { ... } // 假设这里可能吐出一个异常};void原创 2012-01-25 21:52:43 · 441 阅读 · 0 评论 -
Effective C++读书笔记(7)
昨天偷懒了,今天补。条款10:令operator=返回一个reference to *thisHave assignment operators return areference to *this关于赋值的一件有意思的事情是你可以把它写成连锁形式。int x, y, z; x = y = z = 15; // 赋值连锁形式,相当于x = (y = (z = 1原创 2012-01-27 23:40:29 · 457 阅读 · 0 评论 -
Effective C++读书笔记(1)
条款01:视C++ 为一个语言联邦View C++ as a federation of languages.今天的C++ 已经是一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、泛型形式(generic)、元编程形式(metaprogramming)的语言。将C++ 视为一个由相关语言组成的联邦而非单一语言。原创 2012-01-17 18:15:14 · 528 阅读 · 0 评论 -
Effective C++读书笔记(0)
作为明年7月入职的职场新人,虽然大学里写了不少project,但实战经验匮乏,实在不是什么牛人。所以还是笨鸟先飞,在一段非常闲适的日子里买来了Effective C++,想进一步提升自我,在入职前打好基础,特此边研读边做笔记一份,有摘录有总结有自己的一些理解。我知道这玩意儿基本没什么人观摩,但万一有人走过路过,望不吝赐教。 Start声明式(Declaration):告诉编译器某个东西原创 2012-01-16 21:54:13 · 544 阅读 · 0 评论 -
Effective C++读书笔记(9)
条款14:在资源管理类中小心copying行为Think carefully about copying behaviorin resource-managing classes条款13介绍了作为资源管理类支柱的 Resource Acquisition IsInitialization (RAII) 原则,并描述了 auto_ptr 和 tr1::shared_ptr 在基于堆的资源上运原创 2012-01-28 19:29:26 · 540 阅读 · 0 评论 -
Effective C++读书笔记(10)
条款16:成对使用new和delete时要采取相同形式Use the same form in corresponding uses ofnew and delete当你对一个指针使用 delete,唯一能够让delete知道内存中是否存在一个“数组大小记录”的方法就是由你来告诉它。如果你在使用的 delete 中加入了方括号,delete 就认定那个指针指向一个数组。否则,就认定指向一个原创 2012-01-29 15:13:20 · 609 阅读 · 0 评论 -
Effective C++读书笔记(11)
条款17:让接口容易被正确使用,不易被误用Make interfaces easy to use correctly andhard to use incorrectlyC++ 被淹没于接口中。函数接口、类接口、模板接口。每一个接口都是客户与你的代码互动的手段。在理想情况下,如果使用某个接口而没有得到预期的行为,这个代码不该编译通过,反过来,如果代码可以编译,那么它做的就是客户想要的。原创 2012-01-30 22:34:41 · 692 阅读 · 0 评论 -
Effective C++读书笔记(12)
条款19:设计class 犹如设计typeTreat class design as type design在 C++ 中,就像其它面向对象编程语言,可以通过定义一个新的类来定义一个新的类型。作为一个C++开发者,你的大量时间就这样花费在扩张你的类型系统。这意味着你不仅仅是一个类的设计者,而且是一个类型的设计者。重载函数和运算符,控制内存分配和回收,定义对象的初始化和终结过程——这些全在你原创 2012-01-31 21:33:44 · 614 阅读 · 0 评论 -
Effective C++读书笔记(13)
条款21:必须返回对象时,别妄想返回其referenceDon’t try to return a reference when youmust return an object一旦程序员抓住对象传值的效率隐忧,很多人就会一心一意根除传值的罪恶。他们不屈不挠地追求传引用的纯度,但他们全都犯了一个致命的错误:他们开始传递并不存在的对象的引用。考虑一个用以表现有理数的类,包含一个函数计算两个有原创 2012-02-01 23:00:15 · 713 阅读 · 0 评论 -
Effective C++读书笔记(14)
条款23:宁以non-member、non-friend替换member函数Prefer non-member non-friend functions tomember functions想象一个用来表示网页浏览器浏览器的类。这样一个类可能提供的大量函数中,有一些用来清空下载元素高速缓存区、清空访问过的URLs历史,以及从系统移除所有cookies的功能:class WebBrows原创 2012-02-02 21:54:56 · 561 阅读 · 0 评论 -
Effective C++读书笔记(16)
条款26:尽可能延后变量定义式出现的时间Postpone variable definitions as long as possible只要你定义了一个带有构造函数和析构函数的类型变量,当控制流程到达变量定义时,你会承受构造成本,而当变量离开作用域时,你会承受析构成本。如果有最终并未被使用的变量造成这一成本,你就要尽你所能去避免它。不要认为自己不会定义一个不使用的变量。考虑下面这个函原创 2012-02-04 17:38:48 · 563 阅读 · 0 评论 -
指针数组和数组指针
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组 表示:数组a中的元素都为int型指针转载 2014-05-28 22:14:24 · 715 阅读 · 0 评论