SlideShare une entreprise Scribd logo
1  sur  21
编程那些事儿
练武不练功,到老一场空!
 内功:
 数据结构,算法,架构,设
计模式,组成原理,操作
系统,计算机网络,基本
数学和计算机知识……
 武功秘籍:
 一个好的创意!!!
 修炼 == 学习
 实战 == 项目
 兵器:
 编程语言如C++,Java
等
 C++基本功:
 C++语法,C++编程技
巧
C++语法篇(1)- explicit
 explicit 显示调用构造函数,单参数构造函数使用
 class String
 {
◦ explicit String(int size);
◦ String(const char*p);
};
String s1 = ‘a’; //不可以
String s2(10); //OK
String s3 = “abc”; //期待的形式
C++语法篇(1)- explicit
 class IntChildClassrray{
 public:
◦ IntChildClassrray(int size);
};
IntChildClassrray a(10);
IntChildClassrray b(10);
for(int i=0; i<10; ++i)
if(a==b[i]) //What happened?
……
C++语法篇(2)-成也寄存器 败也寄存器
 register 建议编译器放进寄存器(频繁访问指针)
 volatile 别放进寄存器(for循环中的计数器i)
 程序优化optimization编译参数
 MSVC /Od /O1 /O2 /Ox
 GNU –O1 –O2 –O3
C++语法篇(3)-强制类型转换
 static_cast
 就咱这编译器,基本告别C模式转换
 double d=50.0;
 int i = (int)d; //在C++中过时了
 int i = static_cast<int>(d);//More safe
 const_cast
 去掉const和volatile属性,除非万不得已,不然还是远离它
 void f(const TypeChildClass* a)
 {
◦ TypeChildClass* b=a; //Error
◦ TypeChildClass* b=const_cast<TypeChildClass*>(a); //终
于编译过了,最好不要这么做,如果你像更改,直接定义成非const的最
好
 }
C++语法篇(3)-强制类型转换
 dynamic_cast
 多态必备,运行时检查,主要用于基类向派生类转换.
 class ChildClass:public BaseClass{};
 BaseClass* ptr;
 ChildClass* a = dynamic_cast<ChildClass*>(ptr); //可以,More
safe
 ChildClass* a = static_cast<ChildClass*>(ptr); //可以,More speed
 class ChildClass:virtual public BaseClass{};
 BaseClass* ptr;
 ChildClass* a = dynamic_cast<ChildClass*>(ptr); //可以
 ChildClass* a = static_cast<ChildClass*>(ptr); //不可以
 void *ptr;
 MyClass* a = dynamic_cast<MyClass*>(ptr);//不可以
 a = static_cast<MyClass*>(ptr); //可以,但是后果不堪设想
C++语法篇(3)-强制类型转换
 reinterpret_cast
 负责把一个void*或者纯地址转换为所需类型
 void *v;
 TypeA *a=reinterpret<TypeA*>(v);
 TypeA *a=reinterpret<TypeA*>(0x00ff);
 int cache();
 安全隐患
 忠告:
 第一.四种转换都是模板函数别忘了尖括号+括号
 第二.尽量避免C模式的转换改用C++模式的强制类型转换
 第三.const_cast和reinterpret_cast安全隐患比较大,尽量少
用.
C++语法篇(4)-符号重载
 符号重载:今天的牺牲是为了换来明天的解放
 *(指针),->,[],++,--等符号在STL的容器当中
有大量的使用.
 这里讲两种比较容易忽略的地方++i和i++操作
符和二元操作符的一个小细节(见operator.cpp)
 auto_ptr就是用到了*和->的重载来实现的,可
以很好的控制指针的申请和释放.
C++语法篇(5)-&符号几时用?
 &引用符号什么时候用,这里主要讲一下传参和返回什么时候用.两种都是可
用可不用的,但是用了可以提高效率.
 1.作为参数
 首先是值传递,自定义类型最好用,默认类型可用可不用.不加引用符号,不会
出现错误,但是加了会提高效率.而默认类型加和不加效果并没有自定义类型
明显.
 void f(const Type1 &,const int &);
 void f(const Type2 &,const int);
 2.作为返回类型
 指针取值的都可以加.
 int f(){int value=0;return value;}
 int *value;
 int &f(){*value=0;return *value;}
 最为常见:
 TypeA &TypeA::f(){return *this;}
C++语法篇(6)-访问权限知多少
 protected类型:子类可以访问.
 class A
 {
 public:
 inline void g(A &a)
 {
 value = a.value;
 }
 protected:
 int value;
 };
C++语法篇(6)-访问权限知多少
 class B:public A
 {
 public:
 inline void f()
 {
 value = a.value;
 }
 inline void h(A &c)
 {
 value = c.value;
 }
 private:
 A a;
 };
C++应用篇(1)-模板的应用
 模板类和函数的定义,用处不大,编程使用较少
 模板类和函数的调用却处处可见:STL,boost
 STL应用的建议(PC机上肯定试用,嵌入式选择性借鉴):
 1.尽量使用模板,如:变长数组,排序,搜索,!!!字符串类型String.抛开任何内存和效率的顾虑
放心大胆的使用STL吧.
 2.尽量不要尝试性在工程中使用自己实现的类STL库,你不会比STL写的更完美,更安全,更高
效.
 3.sgi版本的模板跨平台性更强,实现更为广泛.
 4.仿函数在模板中应用很广( 应用(3) ).
 5.list<int>和list<double>完全是两个豪不相关的类,非继承关系,模板工作于编译阶段效
率很高.
 6.struct Token{char*;enum}  用map吧!
 7.迭代器中 <containter.end() 和 !=containter.end()不一样,一定要用后者!
 8.当返回值为两个时, 还在使用A f(B*);吗,看来你OUT了,现在流行 pair<A,B> f();
 9.++i效率高于i++, x+=y效率高于x=x+y(相差不多无关紧要)
 10.STL的作用域都是std,在工程中尽量不要用using namespace std;会产生命名空间冲
突,可以用using std::cout; using std::cin;
C++应用篇(2)-C方法 vs C++方法
 PC机平台强烈建议(嵌入式平台选择性建议):
 1.尽量使用C++的new 和delete替代malloc和free,如果你
想用realloc可能vect更适合你.
 2.多用流控制吧,比如cout替代printf,cin替代scanf,fstream
替代fopen.使用方便,并且方便和STL结合.
 3.尝试用cstdio代替stdio.h,cstdlib代替stdlib.h还有其它的C
标准库也是.在C++中,类内部使用全局函数需要加上,比
如::fopen,::fwrite(与编译器相关).
 4.inline,enum和const代替宏,仿函数代替指向函数的指针.
 5.C++ lib不是万能的,但是C++却可以让我们不付出任何代
价的调用C lib,不用白不用.    
 6.不要去担心语言差异的效率问题,C只比C++快那么一点点.
而使用得当的面向对象可以把你的编程效率提高好几倍,好的
框架也可以为今后的扩展和维护省下一大笔人力,资金和时间.
C++应用篇(3)-仿函数
 仿函数:顾名思义仿制的函数,不是真正意义上的
函数,它实际是一个括号操作符的重载.
 举例:比如排序函数的比较方法(见functor.cpp)
C++应用篇(4)-循环只做它该做的
 老祝语:万恶的strlen,可恶的for循环.
 for( ; ; )
 {
◦ a[i] = strlen(str) + i;
 }
 int len = strlen(str);
 for( ; ; )
 {
◦ a[i] = len + i;
 }
 万恶的临时变量:
 for( ; ; )
 {
◦ int temp = 0; //我不属于这里,放到for循环之外
◦ temp = a[i];
◦ a[i]= b[i];
◦ b[i] = temp;
 }
C++应用篇(5)-Qt and MFC are C++
 无论是Qt还是MFC,你首先要记住它先是C++,然后
才是Qt或者MFC.所以你必须遵守C++的一切规则.
 无论用Qt还是MFC亦或是别的GUI库,STL可以
用,C++的一切语法和特性在这都可以用.立足于我在
写的是C++程序,调用了Qt或者MFC类库.
 当Qt或者是MFC库中没有你想要的东西的时候,记得
回归C++思想去解决问题,写lib的人也不可能面面俱
到.它没办法把每一个人的需求全部考虑到.而且C++
的开源库都是可以用进来帮助你解决问题的.
 一个”Qt的Assistant”引发的血案!
面向对象的精髓-设计模式
 面向对象并不一定能够提高运行效率,效率主要是
和算法挂钩.
 C是一种”尽可能接近机器”的语言,C++是一种”
尽可能接近需要解决的问题”的语言
 Bjarne Stroustrup
 方便灵活的接口和合理设计模式才是C++的优点
 设计模式是伪科学?? 23种Only?? 束缚编程人员的
创造能力??
参考书籍
 C++程序设计语言
 C++沉思录
 Effective C++
 More Effective C++
 C++标准程序库
 STL源码剖析
首先感谢党和祖国
还要感谢CCTV,MTV和各种TV

Contenu connexe

Tendances

Objc under the_hood_2013
Objc under the_hood_2013Objc under the_hood_2013
Objc under the_hood_2013Michael Pan
 
OOP in C - Virtual Function (Chinese Version)
OOP in C - Virtual Function (Chinese Version)OOP in C - Virtual Function (Chinese Version)
OOP in C - Virtual Function (Chinese Version)Kai-Feng Chou
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學Sita Liu
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集shademoon
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片kao kuo-tung
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗乐群 陈
 
C++11 smart pointers
C++11 smart pointersC++11 smart pointers
C++11 smart pointerschchwy Chang
 
Gobject - Inherit (Chinese)
Gobject - Inherit (Chinese)Gobject - Inherit (Chinese)
Gobject - Inherit (Chinese)Kai-Feng Chou
 
ajax_onlinemad
ajax_onlinemadajax_onlinemad
ajax_onlinemadKitor23
 
Slide08 807007748
Slide08 807007748Slide08 807007748
Slide08 807007748Shiyao Ma
 
Ihome inaction 篇外篇之fp介绍
Ihome inaction 篇外篇之fp介绍Ihome inaction 篇外篇之fp介绍
Ihome inaction 篇外篇之fp介绍dennis zhuang
 
PHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHP
PHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHPPHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHP
PHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHPLi-Wei Lu
 
17第十七讲(第七章中)(2)
17第十七讲(第七章中)(2)17第十七讲(第七章中)(2)
17第十七讲(第七章中)(2)何青青 Clare
 

Tendances (19)

第4章函数
第4章函数第4章函数
第4章函数
 
Objc under the_hood_2013
Objc under the_hood_2013Objc under the_hood_2013
Objc under the_hood_2013
 
OOP in C - Virtual Function (Chinese Version)
OOP in C - Virtual Function (Chinese Version)OOP in C - Virtual Function (Chinese Version)
OOP in C - Virtual Function (Chinese Version)
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
 
第六章 函數與巨集
第六章 函數與巨集第六章 函數與巨集
第六章 函數與巨集
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片
 
竞赛中C++语言拾遗
竞赛中C++语言拾遗竞赛中C++语言拾遗
竞赛中C++语言拾遗
 
C++11 smart pointers
C++11 smart pointersC++11 smart pointers
C++11 smart pointers
 
Gobject - Inherit (Chinese)
Gobject - Inherit (Chinese)Gobject - Inherit (Chinese)
Gobject - Inherit (Chinese)
 
ajax_onlinemad
ajax_onlinemadajax_onlinemad
ajax_onlinemad
 
C語言標準輸出入函式
C語言標準輸出入函式C語言標準輸出入函式
C語言標準輸出入函式
 
Slide08 807007748
Slide08 807007748Slide08 807007748
Slide08 807007748
 
Ch6 函式
Ch6 函式Ch6 函式
Ch6 函式
 
Ihome inaction 篇外篇之fp介绍
Ihome inaction 篇外篇之fp介绍Ihome inaction 篇外篇之fp介绍
Ihome inaction 篇外篇之fp介绍
 
C語言結構與串列
C語言結構與串列 C語言結構與串列
C語言結構與串列
 
PHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHP
PHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHPPHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHP
PHP 初階課程 Part. 3 - Functions and brief intro to Object-Oriented PHP
 
Python 迴圈作業
Python 迴圈作業Python 迴圈作業
Python 迴圈作業
 
17第十七讲(第七章中)(2)
17第十七讲(第七章中)(2)17第十七讲(第七章中)(2)
17第十七讲(第七章中)(2)
 
Reply
ReplyReply
Reply
 

En vedette

Kanda Hill's Supporting Docs - Pictures
Kanda Hill's Supporting Docs - PicturesKanda Hill's Supporting Docs - Pictures
Kanda Hill's Supporting Docs - Picturesmdubois2
 
Xsolla Offers
Xsolla OffersXsolla Offers
Xsolla Offersxsollacom
 
Xtreme Support d Infor
Xtreme Support d InforXtreme Support d Infor
Xtreme Support d InforEric Bossard
 
XSLT 1 and XPath Quick Reference (from mulberrytech.com)
XSLT 1 and XPath Quick Reference (from mulberrytech.com)XSLT 1 and XPath Quick Reference (from mulberrytech.com)
XSLT 1 and XPath Quick Reference (from mulberrytech.com)FrescatiStory
 
Xxvii cursos d'estiu, oreto doménech, materials per a l'alumnat
Xxvii cursos d'estiu, oreto doménech, materials per a l'alumnatXxvii cursos d'estiu, oreto doménech, materials per a l'alumnat
Xxvii cursos d'estiu, oreto doménech, materials per a l'alumnatOreto Masià
 
искусство и литература Xvii – xviii вв
искусство и литература Xvii – xviii ввискусство и литература Xvii – xviii вв
искусство и литература Xvii – xviii ввProznanie.ru
 
xyzmo@Mobilkom Austria
xyzmo@Mobilkom Austriaxyzmo@Mobilkom Austria
xyzmo@Mobilkom AustriaNamirial GmbH
 
XVII Premios "Pico Peñamellera"
XVII Premios "Pico Peñamellera"XVII Premios "Pico Peñamellera"
XVII Premios "Pico Peñamellera"picopenamellera
 
θαύματα μηχανικής XXI αιώνα
θαύματα μηχανικής XXI αιώναθαύματα μηχανικής XXI αιώνα
θαύματα μηχανικής XXI αιώναFotini
 
XYZ – As Media Coursework Evaluation Final
XYZ – As Media Coursework Evaluation FinalXYZ – As Media Coursework Evaluation Final
XYZ – As Media Coursework Evaluation FinalLorna Wooldridge
 
xunittestpatternchapter15
xunittestpatternchapter15xunittestpatternchapter15
xunittestpatternchapter15SH Park
 
Xua2009 (autoguardado)
Xua2009 (autoguardado)Xua2009 (autoguardado)
Xua2009 (autoguardado)Joel Perea
 
Xvii Islahat
Xvii IslahatXvii Islahat
Xvii IslahatBigBoss
 
X Milla Internacional femenina. Gijón 2008
X Milla Internacional femenina. Gijón 2008X Milla Internacional femenina. Gijón 2008
X Milla Internacional femenina. Gijón 2008F. Ovies
 
XV Oleada Observatorio Red.es
XV Oleada Observatorio Red.esXV Oleada Observatorio Red.es
XV Oleada Observatorio Red.escarlaF1
 
Xsolla PayStation
Xsolla PayStationXsolla PayStation
Xsolla PayStationxsollacom
 

En vedette (20)

XXXIX Congreso Odontológico Ecuatoriano 2010
XXXIX Congreso Odontológico Ecuatoriano 2010XXXIX Congreso Odontológico Ecuatoriano 2010
XXXIX Congreso Odontológico Ecuatoriano 2010
 
Xúpiter.
Xúpiter.Xúpiter.
Xúpiter.
 
Kanda Hill's Supporting Docs - Pictures
Kanda Hill's Supporting Docs - PicturesKanda Hill's Supporting Docs - Pictures
Kanda Hill's Supporting Docs - Pictures
 
Xsolla Offers
Xsolla OffersXsolla Offers
Xsolla Offers
 
XXOX - ppt
XXOX - pptXXOX - ppt
XXOX - ppt
 
Xtreme Support d Infor
Xtreme Support d InforXtreme Support d Infor
Xtreme Support d Infor
 
XSLT 1 and XPath Quick Reference (from mulberrytech.com)
XSLT 1 and XPath Quick Reference (from mulberrytech.com)XSLT 1 and XPath Quick Reference (from mulberrytech.com)
XSLT 1 and XPath Quick Reference (from mulberrytech.com)
 
Xxvii cursos d'estiu, oreto doménech, materials per a l'alumnat
Xxvii cursos d'estiu, oreto doménech, materials per a l'alumnatXxvii cursos d'estiu, oreto doménech, materials per a l'alumnat
Xxvii cursos d'estiu, oreto doménech, materials per a l'alumnat
 
искусство и литература Xvii – xviii вв
искусство и литература Xvii – xviii ввискусство и литература Xvii – xviii вв
искусство и литература Xvii – xviii вв
 
xyzmo@Mobilkom Austria
xyzmo@Mobilkom Austriaxyzmo@Mobilkom Austria
xyzmo@Mobilkom Austria
 
X@T - UGT
X@T - UGTX@T - UGT
X@T - UGT
 
XVII Premios "Pico Peñamellera"
XVII Premios "Pico Peñamellera"XVII Premios "Pico Peñamellera"
XVII Premios "Pico Peñamellera"
 
θαύματα μηχανικής XXI αιώνα
θαύματα μηχανικής XXI αιώναθαύματα μηχανικής XXI αιώνα
θαύματα μηχανικής XXI αιώνα
 
XYZ – As Media Coursework Evaluation Final
XYZ – As Media Coursework Evaluation FinalXYZ – As Media Coursework Evaluation Final
XYZ – As Media Coursework Evaluation Final
 
xunittestpatternchapter15
xunittestpatternchapter15xunittestpatternchapter15
xunittestpatternchapter15
 
Xua2009 (autoguardado)
Xua2009 (autoguardado)Xua2009 (autoguardado)
Xua2009 (autoguardado)
 
Xvii Islahat
Xvii IslahatXvii Islahat
Xvii Islahat
 
X Milla Internacional femenina. Gijón 2008
X Milla Internacional femenina. Gijón 2008X Milla Internacional femenina. Gijón 2008
X Milla Internacional femenina. Gijón 2008
 
XV Oleada Observatorio Red.es
XV Oleada Observatorio Red.esXV Oleada Observatorio Red.es
XV Oleada Observatorio Red.es
 
Xsolla PayStation
Xsolla PayStationXsolla PayStation
Xsolla PayStation
 

Similaire à xwz 2010-10-31

Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Justin Lin
 
Metro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' ViewMetro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' ViewEric ShangKuan
 
[科科營]資工程式試作
[科科營]資工程式試作[科科營]資工程式試作
[科科營]資工程式試作nctutlc2013
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的CGoogol Lee
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版逸 張
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)jane2006
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验Leo Zhou
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Justin Lin
 
C++工程实践
C++工程实践C++工程实践
C++工程实践Shuo Chen
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。勇浩 赖
 

Similaire à xwz 2010-10-31 (20)

Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
 
Metro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' ViewMetro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' View
 
[科科營]資工程式試作
[科科營]資工程式試作[科科營]資工程式試作
[科科營]資工程式試作
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Dev307
Dev307Dev307
Dev307
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的C
 
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
張逸 - 研究所 / 轉學考計算機概論 、公職計算機概要 - 程式語言 - 試閱版
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
 
第5章数组
第5章数组第5章数组
第5章数组
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
[系列活動] Python 爬蟲實戰
[系列活動] Python 爬蟲實戰[系列活動] Python 爬蟲實戰
[系列活動] Python 爬蟲實戰
 
Ch10
Ch10Ch10
Ch10
 
Ch10 教學
Ch10 教學Ch10 教學
Ch10 教學
 
用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验用Cython封装c++代码为python模块的一点经验
用Cython封装c++代码为python模块的一点经验
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
Hi Haskell
Hi HaskellHi Haskell
Hi Haskell
 

xwz 2010-10-31