筆記時間:2017-10-09 ~ 2017-10-23 ? ?來源:網(wǎng)易云課堂 / Boolan / GeekBand
授課老師:侯捷
說明:結(jié)合C++面向?qū)ο蟾呒壘幊蹋ㄉ希┮曨l課程和《C++ Primer中文版》(第5版)記錄知識點(diǎn)座慰。
第一課 C++編程簡介
目標(biāo):
培養(yǎng)正規(guī)大氣的編程習(xí)慣京郑;
以良好的方式編寫C++ class(Object Based基于對象)class without pointer members / class with pointer members躏吊;
學(xué)習(xí)Classes之間的關(guān)系(Object Oriented面向?qū)ο螅?i>繼承(inheritance)普舆;復(fù)合(composition);委托(delegation)
推薦書目:《C++ Primer》(第五版)表悬、《The C++ Programming Language》(Fourth Edition)弥锄、《Effective C++》、《THe C++ Standard Library》蟆沫、《STL源碼剖析》
Objective Based:面對的是單一class的設(shè)計(jì)鲫售;Objective Oriented:面對的是多重classes的設(shè)計(jì)净蚤,classes和classes之間的關(guān)系亮元。
第二課 頭文件與類的聲明
文件擴(kuò)展名不一定是.h或.cpp篮赢,也可能是.hpp或其他甚至無擴(kuò)展名(與編譯器平臺有關(guān))
頭文件(Header)中的防衛(wèi)式聲明:
(頭文件complex.h)
#ifndef __COMPLEX__
#define __COMPLEX__
……
#endif
(主程序complex-test.h)
#include "complex.h"
頭文件的布局:
{
complex c1(2,1);
complex c2;
}
inline(內(nèi)聯(lián))函數(shù)
不是所有寫的inline函數(shù)編譯器都能做成inline
函數(shù)若在class body內(nèi)定義完成扶供,便自動成為inline候選人
access level(訪問級別):
“public” “private” (“protected”例子中不涉及)
public、private段落可任意交錯出現(xiàn)捏顺。不一定要集中寫六孵。
第三課 構(gòu)造函數(shù)
構(gòu)造函數(shù)名與類名相同;
無需返回類型幅骄,因?yàn)闃?gòu)造函數(shù)是用來創(chuàng)建對象劫窒;
構(gòu)造函數(shù)可以有很多個-overloading(重載);
函數(shù)重載:同一作用域內(nèi)的幾個函數(shù)名字相同但形參列表不同拆座。
調(diào)用這些函數(shù)時主巍,編譯器會根據(jù)傳遞的實(shí)參類型推斷想要的是哪個函數(shù)。
main函數(shù)不能重載挪凑。
上例中孕索,第一個complex有默認(rèn)實(shí)參,第二個complex無類型躏碳,編譯器不知道調(diào)用哪一個搞旭,有沖突。
構(gòu)造函數(shù)放在private里肄渗,不可在外部調(diào)用。
第四課 參數(shù)傳遞與返回值
const member functions(常量成員函數(shù))
參數(shù)傳遞:pass by value ?vs. pass by reference
盡量不要傳value咬最,C中傳指針翎嫡。
C++中可傳引用。
const的引用
把引用綁定到const對象上丹诀。
友元:自由取得friend的private成員钝的。相同class的各個objects互為友元。
第五課 操作符重載與臨時對象
操作符重載-成員函數(shù):this
二元操作符:+=
成員函數(shù)帶隱含參數(shù)this(調(diào)用者)铆遭。上例中c2為this硝桩。
連串使用時若函數(shù)設(shè)為void,則c2無法向c3傳遞枚荣。
操作符重載-非成員函數(shù):無this
temp object(臨時對象) - typename();
typename()用法上相當(dāng)于int();
上例中complex()使用默認(rèn)參數(shù)碗脊。
第六課 復(fù)習(xí)Complex類的實(shí)現(xiàn)過程
復(fù)演Complex類的代碼編寫中思維的流程。