一磕谅、C++編程簡(jiǎn)介
C++ 98(1.0)
C++ 11(2.0)
二、頭文件與類的說明
1.基于對(duì)象與面向?qū)ο?/h3>
基于對(duì)象(Object Based):面對(duì)單一class的設(shè)計(jì)。
面向?qū)ο螅∣bject Oriented):面對(duì)多重classes的設(shè)計(jì)卸夕,class與class之間的關(guān)系层释。
2.classes的兩個(gè)經(jīng)典分類
不帶指針的類
帶指針的類
3.頭文件中的防衛(wèi)式聲明(guard)
#ifndef _COMPLEX_
#define _COMPLEX_
#endif
防止重復(fù)include
4.頭文件的布局
0 前置聲明
1 類聲明
2 類定義
5.class的聲明
class head和class body
有些函數(shù)在class body直接定義,另一些在body之外(只聲明快集,不定義)贡羔。
6.模板簡(jiǎn)介
template<typename T>
三、構(gòu)造函數(shù)
1.inline函數(shù)
函數(shù)若在class body內(nèi)定義完成个初,便自動(dòng)成為inline候選人乖寒。
inline有宏的好處,沒有宏的缺點(diǎn)院溺。
2.訪問級(jí)別
public:
private:數(shù)據(jù)部分楣嘁,類內(nèi)部使用(避免數(shù)據(jù)成為public)
protected:
3.構(gòu)造函數(shù)
(1)函數(shù)名和類名一致
(2)沒有返回類型
(3)構(gòu)造函數(shù)的獨(dú)特語法:初始化列表(initialization list)
一個(gè)變量數(shù)值設(shè)定有兩個(gè)階段:一是初始化,二是賦值珍逸。如果不在初始化列表賦值逐虚,時(shí)間晚效率差。
不帶指針的類多半不用寫析構(gòu)函數(shù)谆膳。
4.構(gòu)造函數(shù)-重載(overloading)
為什么同名函數(shù)可以有一個(gè)以上叭爱?
構(gòu)造函數(shù)1有默認(rèn)參數(shù),1和2沖突漱病,2不可以买雾,可以寫其他重載的構(gòu)造函數(shù)把曼。
5.構(gòu)造函數(shù)放在private區(qū)
外界不能直接創(chuàng)建對(duì)象。比如Singleton單例設(shè)計(jì)模式漓穿。
四嗤军、參數(shù)傳遞與返回值
1.常量成員函數(shù)(const member functions)
const放在函數(shù)后面,即小括號(hào)后面大括號(hào)前面器净。const函數(shù)不改變成員數(shù)據(jù)型雳。
const放在對(duì)象或變量的前面,那么對(duì)象或變量不能改變山害。
常量對(duì)象只能調(diào)用常量成員函數(shù)纠俭。
2.參數(shù)傳遞
pass by value和pass by reference(to const)(使用&符號(hào))
pass by value對(duì)象全部傳過去(value所有字節(jié)全部傳過去,壓到函數(shù)棧中)浪慌,value可能很大冤荆,盡量不要pass by value。
pass by reference相當(dāng)于傳指針(引用在底部就是指針)权纤,速度很快钓简。參數(shù)傳遞盡量傳引用。
加const不能修改汹想。
3.返回值傳遞
reference用于參數(shù)傳遞和返回值傳遞外邓。
return by value和return by reference(to const)
盡量return by reference,有些情況不能return by reference古掏。
(1)函數(shù)需要?jiǎng)?chuàng)建對(duì)象存放函數(shù)結(jié)果损话。返回的是新創(chuàng)建的對(duì)象,因?yàn)楹瘮?shù)結(jié)束對(duì)象就消失槽唾,是local對(duì)象丧枪,不能return by reference。除了這種情況都可以return by reference庞萍。比如c1+c2拧烦,不能return by reference。
(2)函數(shù)結(jié)果放在已經(jīng)有的對(duì)象钝计×挡可以return by reference。比如私恬,c1+=c2交播。
4.友元friend
友元函數(shù)可以自由取得private成員。
為什么友元函數(shù)放在private部分践付?補(bǔ)充
friend?類型 函數(shù)名(形式參數(shù))
(1)友元函數(shù)的聲明可以放在類的私有部分秦士,也可以放在公有部分,它們是沒有區(qū)別的永高,都說明是該類的一個(gè)友元函數(shù)隧土。
(2)一個(gè)函數(shù)可以是多個(gè)類的友元函數(shù)提针,只需要在各個(gè)類中分別聲明。友元函數(shù)的調(diào)用與一般函數(shù)的調(diào)用方式和原理一致曹傀。
注意:相同class的各個(gè)objects互為friends友元辐脖。如下圖:
五、操作符重載與臨時(shí)對(duì)象
1.操作符重載1(成員函數(shù)) this
(1)任何成員函數(shù)都帶一個(gè)隱藏的參數(shù):this(指向調(diào)用者皆愉,是一個(gè)指針)嗜价。
(2)為什么又包了一層?
_doapl 標(biāo)準(zhǔn)庫中的函數(shù)(do assignment plus)
(3)return by reference語法分析
return by reference:傳遞者無需知道接收者是以reference形式接受幕庐。
return *ths返回的是對(duì)象久锥,complex&接受的是引用。
(4)+=操作符返回值不能是value异剥?
value不能連串使用c3+=c2+=c1瑟由。
(5)全局函數(shù)
2-1是成員函數(shù),2-2是全局函數(shù)冤寿。
2.操作符重載2(非成員函數(shù)) 無this
??? temp object臨時(shí)對(duì)象
六歹苦、設(shè)計(jì)類總結(jié)
1.構(gòu)造函數(shù)初始化列表
2.函數(shù)該不該加const
3.參數(shù)傳遞盡量考慮by reference(考慮要不要加const)
4.return by value or by reference
5.數(shù)據(jù)盡量放在private,函數(shù)大部分放在public