SlideShare a Scribd company logo
1 of 172
改善程序设计技术的 50 个有效做法   第二版 2002.3   Scott Meyers   侯  捷  译
[object Object],[object Object],[object Object],[object Object]
C++ 新标准新的类型 bool  ,[object Object],[object Object],[object Object],[object Object]
新的转型动作 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
1.  尽量以 const 和 inline 取代 #define ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
# define ratio 1.653 // 编译器看不见 ratio ,只看见 1.653 // 一旦出错,不会报告 ,[object Object],[object Object],[object Object]
In Class  常量  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
2.  尽量以 <iostream> 取代 <stdio.h> ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
3.  尽量以 new 和 delete 取代 malloc 和 free ,[object Object],[object Object],[object Object],[object Object],[object Object]
4.  尽量使用 C++ 风格的注释形式 ,[object Object],[object Object],[object Object],[object Object],[object Object]
内存管理 (memory management) ,[object Object],[object Object],[object Object],[object Object]
5.  使用相同形式的 new 和 delete ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
typedef string addresslines[4]; ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
6.  记得在析构函数中以 delete 对付指针成员 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
7.  为内存不足的状况预作准备 ,[object Object],[object Object],[object Object],[object Object],[object Object]
typedef void (* new_handle )( ); ,[object Object],[object Object],[object Object],[object Object],[object Object]
可以自定义新的 new_handler 函数, 用 set_new_handler 确认。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
设计 new_handler 函数,令其完成如下任务: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
C++ 不支持 class 中 专用的 new_handler ,但仍可以在一个 class 中重载 operator new,  和 set_new_handler 函数,让它调用特定的 new_handler 函数,而不用系统给出的全局 new_handler 。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
void *X:: operator new (size_t size) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
// 应用 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
可以做一个混合风格基类 允许 “设定 class 专属 new_handler” ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
template<class T> ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
template<class T> ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
new_handler NewHandlerSupport<T>   ::currentHandler;  // 初始化为 0 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
8.  撰写 operator new 和 operator delete 时 应遵守的公约 ,[object Object],[object Object],[object Object]
//new   函数的伪码 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
无穷循环可以让更多的内存可用, 或安装一个不同的 new_handler , 或卸载 new_handler , 或抛出一个异常, 或直接结束程序。
operator new  可以被继承 ,   但要小心 , 否则会导致问题 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
改进的办法: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
重写 operator delete ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
//member 版 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
9.  避免覆盖 new 的正规形式 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
10.  如果写了一个 operator new    不要忘记写一个 operator delete ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Airplane *p=new Airplane;  // 要求内存不大 ,[object Object],[object Object],pa ,[object Object],Airplane  对象所需的  内存  纪录内存大小的  数据
定制内存管理。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
定义一个 memory pool  类,使每一个 pool 对象都是一个内存配置器。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
构造函数、析构函数和赋值运算符 ,[object Object],[object Object]
11. class 内有成员指针并动态配置内存时,一定要有拷贝构造函数,赋值运算符重载
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],Hello World a b data data
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
12 构造函数中尽量以初始化代替赋值 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
有一种例外:   一个类内有大量数据成员时,赋值比初始化效率高。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
12.  数据成员初始化的次序应该和类内声明的次序相同 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
14.  总是让基类拥有虚析构函数 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
15.  让 operator= 返回 *this 的引用 reference ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
16.  在 operator= 中为所有的数据成员赋值 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
在 operator= 中检查是否“自己赋值给自己” ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
类和函数的设计和申明 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
18 .努力让接口完满( complete )且最小化 ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
19 .区分成员函数、非成员函数   和友元函数 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
20 .避免将数据成员设置为公有数据 ,[object Object],[object Object]
21 .尽可能使用 const ,[object Object],[object Object],[object Object],[object Object],[object Object]
函数中 const  可以修饰传回值,参数,成员函数时甚至可以修饰整个函数。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
22 .尽量使用引用参数传址 pass by reference ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
23 .当你必须传回 objebct( 传值 ) 时不要传址 ( 引用) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],& 错误 。返回值地址指向局部对象,与局部对象同名,运算执行完毕,局部对象被析构,返回值指向一个不存在的地址。
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
24 .函数重载和参数缺省之间,谨慎抉择 ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
25 .避免对指针类型和数值类型进行重载 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
26 .防备隐性二义性状态 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
27 .如果不想使用编译器暗自产生的成员函数,明确地拒绝 ,[object Object],[object Object],[object Object]
28 .尝试切割 global namespace   ( 全局命名空间 ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
有三种方法取用 namespace 内的名字。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
类与函数的实现   29 .避免传回内部数据的 handles ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
31 .千万不要返回“函数内局部对象的 reference” 或“函数内以 new 获得的指针所指的对象” ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
32.  尽可能延缓变量定义式的出现 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
33 . 明智地运用 inline ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
34 . 将文件之间的编译关系降到最低 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
继承关系与面向对象设计 ,[object Object],[object Object],[object Object],[object Object],[object Object]
35 .公有继承, “ isa” 的关系 ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
36 .区分接口继承( interface inheritance )和实现继承( implementation inheritance ) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
37.  绝对不要重新定义继承而来的非虚函数 ,[object Object],[object Object],[object Object]
38 .绝对不要重新定义继承而来的缺省参数值 ,[object Object],[object Object],[object Object],[object Object],[object Object]
39 .避免在继承中做向下转型( castdown )动作 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
40 .通过 layering 技术来模塑 has-a 或 is-implemented-in-terms-of 的关系 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
41 .区分继承和模板 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
42 .明智地运用私有继承 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
43 .明智地运用多继承 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
44 .说出你的意思并了解你所说的每一句话 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
杂项讨论 45 .清楚知道 C++ 编译器为我们完成和调用哪些函数 ,[object Object],[object Object]
46 .宁愿编译和连接时出错,也不要执行时出错 ,[object Object],[object Object],[object Object],[object Object]
47 .使用 non-local static objects 之前确定它已有初值 ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
49 .尽量让自己熟息 C++ 标准程序库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
50 .加强自己对 C++ 的了解

More Related Content

What's hot

Ecma script3
Ecma script3 Ecma script3
Ecma script3 gniavaj
 
Java script closures
Java script closuresJava script closures
Java script closuresskywalker1114
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)jhao niu
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門吳錫修 (ShyiShiou Wu)
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and nodePeter Yi
 
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...彼得潘 Pan
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗乐群 陈
 
JavaScript现代化排错实践
JavaScript现代化排错实践JavaScript现代化排错实践
JavaScript现代化排错实践jeffz
 
Wind.js无障碍调试与排错
Wind.js无障碍调试与排错Wind.js无障碍调试与排错
Wind.js无障碍调试与排错jeffz
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)Leo Hui
 
重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)Chris Huang
 
Javascript Training
Javascript TrainingJavascript Training
Javascript Trainingbeijing.josh
 
C++11 smart pointers
C++11 smart pointersC++11 smart pointers
C++11 smart pointerschchwy Chang
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC
 

What's hot (20)

JQuery Plugin
JQuery PluginJQuery Plugin
JQuery Plugin
 
Ecma script3
Ecma script3 Ecma script3
Ecma script3
 
Java script closures
Java script closuresJava script closures
Java script closures
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
 
nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言nodeMCU IOT教學02 - Lua語言
nodeMCU IOT教學02 - Lua語言
 
Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門Arduino應用系統設計 - Arduino程式快速入門
Arduino應用系統設計 - Arduino程式快速入門
 
180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and node
 
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
JavaScript现代化排错实践
JavaScript现代化排错实践JavaScript现代化排错实践
JavaScript现代化排错实践
 
Wind.js无障碍调试与排错
Wind.js无障碍调试与排错Wind.js无障碍调试与排错
Wind.js无障碍调试与排错
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)
 
重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)重構—改善既有程式的設計(chapter 7)
重構—改善既有程式的設計(chapter 7)
 
Javascript Training
Javascript TrainingJavascript Training
Javascript Training
 
Node way
Node wayNode way
Node way
 
Closure
ClosureClosure
Closure
 
C++11 smart pointers
C++11 smart pointersC++11 smart pointers
C++11 smart pointers
 
Python分支作業
Python分支作業Python分支作業
Python分支作業
 
twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹twMVC#27 | C# 7.0 新功能介紹
twMVC#27 | C# 7.0 新功能介紹
 

Viewers also liked

New websites for the LEISA Network and its partners
New websites for the LEISA Network and its partnersNew websites for the LEISA Network and its partners
New websites for the LEISA Network and its partnersILEIA
 
Global Warming
Global WarmingGlobal Warming
Global Warmingkarchi
 
Global Warm(n)ing
Global Warm(n)ingGlobal Warm(n)ing
Global Warm(n)ingkarchi
 
Virus Elimination Course
Virus Elimination Course Virus Elimination Course
Virus Elimination Course Thach Moniroth
 
European Investment Consulting - presentazione istituzionale
European Investment Consulting - presentazione istituzionaleEuropean Investment Consulting - presentazione istituzionale
European Investment Consulting - presentazione istituzionalePasquale Merella, FRM
 
Convegno AICP "Chi ha paura di Standard & Poor's?"
Convegno AICP "Chi ha paura di Standard & Poor's?"Convegno AICP "Chi ha paura di Standard & Poor's?"
Convegno AICP "Chi ha paura di Standard & Poor's?"Pasquale Merella, FRM
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
企业架构建模-ArchiMate语言
企业架构建模-ArchiMate语言企业架构建模-ArchiMate语言
企业架构建模-ArchiMate语言zhoujg
 
Some info on Drupal content management system
Some info on Drupal content management systemSome info on Drupal content management system
Some info on Drupal content management systemILEIA
 
架构师成长之路-个人学习经验分享
架构师成长之路-个人学习经验分享架构师成长之路-个人学习经验分享
架构师成长之路-个人学习经验分享zhoujg
 
Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...
Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...
Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...Pasquale Merella, FRM
 
业务需求分析入门
业务需求分析入门业务需求分析入门
业务需求分析入门zhoujg
 
Goodwill Central Virginia Presentation
Goodwill Central Virginia PresentationGoodwill Central Virginia Presentation
Goodwill Central Virginia PresentationAlecCBlack
 
Foro Futbol De Guatemalat2009
Foro Futbol De Guatemalat2009Foro Futbol De Guatemalat2009
Foro Futbol De Guatemalat2009gus TORRES
 
Presentation at the Berkman Center on Project Lingua
Presentation at the Berkman Center on Project LinguaPresentation at the Berkman Center on Project Lingua
Presentation at the Berkman Center on Project Linguachrissalzberg
 
El Collar De Turquesas Nueva EdicióN +
El Collar De Turquesas   Nueva EdicióN +El Collar De Turquesas   Nueva EdicióN +
El Collar De Turquesas Nueva EdicióN +guest8ba598
 
Usare Startupbusiness al meglio
Usare Startupbusiness al meglioUsare Startupbusiness al meglio
Usare Startupbusiness al meglioDavid Orban
 
Feb 17
Feb 17Feb 17
Feb 17Kati W
 

Viewers also liked (20)

New websites for the LEISA Network and its partners
New websites for the LEISA Network and its partnersNew websites for the LEISA Network and its partners
New websites for the LEISA Network and its partners
 
Global Warming
Global WarmingGlobal Warming
Global Warming
 
Global Warm(n)ing
Global Warm(n)ingGlobal Warm(n)ing
Global Warm(n)ing
 
Virus Elimination Course
Virus Elimination Course Virus Elimination Course
Virus Elimination Course
 
European Investment Consulting - presentazione istituzionale
European Investment Consulting - presentazione istituzionaleEuropean Investment Consulting - presentazione istituzionale
European Investment Consulting - presentazione istituzionale
 
Convegno AICP "Chi ha paura di Standard & Poor's?"
Convegno AICP "Chi ha paura di Standard & Poor's?"Convegno AICP "Chi ha paura di Standard & Poor's?"
Convegno AICP "Chi ha paura di Standard & Poor's?"
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
企业架构建模-ArchiMate语言
企业架构建模-ArchiMate语言企业架构建模-ArchiMate语言
企业架构建模-ArchiMate语言
 
Some info on Drupal content management system
Some info on Drupal content management systemSome info on Drupal content management system
Some info on Drupal content management system
 
架构师成长之路-个人学习经验分享
架构师成长之路-个人学习经验分享架构师成长之路-个人学习经验分享
架构师成长之路-个人学习经验分享
 
Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...
Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...
Vuoi andare in "Pensione senza problemi"? Chiedi ad AICP! - Tavola rotonda pe...
 
业务需求分析入门
业务需求分析入门业务需求分析入门
业务需求分析入门
 
Goodwill Central Virginia Presentation
Goodwill Central Virginia PresentationGoodwill Central Virginia Presentation
Goodwill Central Virginia Presentation
 
Hire Tough To Manage Easy
Hire Tough To Manage EasyHire Tough To Manage Easy
Hire Tough To Manage Easy
 
Foro Futbol De Guatemalat2009
Foro Futbol De Guatemalat2009Foro Futbol De Guatemalat2009
Foro Futbol De Guatemalat2009
 
Presentation at the Berkman Center on Project Lingua
Presentation at the Berkman Center on Project LinguaPresentation at the Berkman Center on Project Lingua
Presentation at the Berkman Center on Project Lingua
 
El Collar De Turquesas Nueva EdicióN +
El Collar De Turquesas   Nueva EdicióN +El Collar De Turquesas   Nueva EdicióN +
El Collar De Turquesas Nueva EdicióN +
 
Usare Startupbusiness al meglio
Usare Startupbusiness al meglioUsare Startupbusiness al meglio
Usare Startupbusiness al meglio
 
China2
China2China2
China2
 
Feb 17
Feb 17Feb 17
Feb 17
 

Similar to 改善程序设计技术的50个有效做法

第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集shademoon
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code cleanmacrochen
 
C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集艾鍗科技
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算建興 王
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline斯理 衛
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學Sita Liu
 
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门Lucien Li
 
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门Lucien Li
 
由一个简单的程序谈起--之四
由一个简单的程序谈起--之四由一个简单的程序谈起--之四
由一个简单的程序谈起--之四yiditushe
 
C++工程实践
C++工程实践C++工程实践
C++工程实践Shuo Chen
 
從 Singleton 談 constructor
從 Singleton 談 constructor從 Singleton 談 constructor
從 Singleton 談 constructorLuba Tang
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事Ben Lue
 
Free Marker中文文档
Free Marker中文文档Free Marker中文文档
Free Marker中文文档yiditushe
 
Swift编程语言入门教程 中文版
Swift编程语言入门教程 中文版Swift编程语言入门教程 中文版
Swift编程语言入门教程 中文版Harvey Zhang
 
Free rtos workshop1@nuu
Free rtos workshop1@nuuFree rtos workshop1@nuu
Free rtos workshop1@nuu紀榮 陳
 

Similar to 改善程序设计技术的50个有效做法 (20)

第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 
C程式-函式與巨集
C程式-函式與巨集C程式-函式與巨集
C程式-函式與巨集
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
 
Coding guideline
Coding guidelineCoding guideline
Coding guideline
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
 
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门
 
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
 
由一个简单的程序谈起--之四
由一个简单的程序谈起--之四由一个简单的程序谈起--之四
由一个简单的程序谈起--之四
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 
從 Singleton 談 constructor
從 Singleton 談 constructor從 Singleton 談 constructor
從 Singleton 談 constructor
 
學好 node.js 不可不知的事
學好 node.js 不可不知的事學好 node.js 不可不知的事
學好 node.js 不可不知的事
 
Free Marker中文文档
Free Marker中文文档Free Marker中文文档
Free Marker中文文档
 
C語言結構與串列
C語言結構與串列 C語言結構與串列
C語言結構與串列
 
Arduino程式快速入門
Arduino程式快速入門Arduino程式快速入門
Arduino程式快速入門
 
ios分享
ios分享ios分享
ios分享
 
Optimzing mysql
Optimzing mysqlOptimzing mysql
Optimzing mysql
 
Swift编程语言入门教程 中文版
Swift编程语言入门教程 中文版Swift编程语言入门教程 中文版
Swift编程语言入门教程 中文版
 
Ch07
Ch07Ch07
Ch07
 
Free rtos workshop1@nuu
Free rtos workshop1@nuuFree rtos workshop1@nuu
Free rtos workshop1@nuu
 

改善程序设计技术的50个有效做法