《thinking in c++》pdf電子書
c++中先編譯,後連線:
編譯:將原始碼編譯為**;
連線:將庫函式和各種自定義函式依次連線成為乙個可執行檔案。
c++中
include
不再使用
.h字尾
#include
變在了#include
。#include
呼叫程式(控制台方式):
system(「
程式名」);
。#include ifstream in(「
檔名」);//
開啟檔案以備讀取
ifstream out(「
檔名」);//
開啟檔案以備寫入。
#include vector
是乙個類似
list
的容器,是范型的。
定義指標函式:
void (*funcptr)()
,注意:
void *funcptr()
是返回void*
的函式。
right-left guideline
:對指標採用先右結合,後左結合的解讀方法。
可能釋放資源要注意,可能有的指標會指向已經釋放的位址。陣列c
的長度sizeof c/sizeof *c
:sizeof c
是總長,
sizeof *c
是第一元素的長度。
匿名:可以匿名
union
、引數。
預設情況下
const:在c
中是外部鏈結級而
c++中是檔案內部鏈結級。所以要在定義
const
變數之外的檔案中使用
const
,那麼要在定義和引用時都聲名
extern
,如:extern int a = 1;//
定義extern int a;//
聲名。在
c中總是給
const
分配空間,而
c++中只有無法編譯時確定
const
值時才被迫為其分配空間。
const int* x; int const* x;//
指向常量的指標,
*先和右邊結合。
int* const x;//
常量指標
int const*const x;
óconst int* const x;//
指向常量的常量指標
字元陣列指標(
char* p = 「abc」;
)型別實際上是常量字元陣列。如果想使陣列不是常量,那麼使用陣列形式的定義
char p = 「abc」;
常量不能做左值。函式返回常量不能作為非常量的右值(
int* ip = w();//
不合法,
w()返回
const int*
)。類中聲名成員函式為常函式,
const
關鍵字放在函式名
()的後面。
不改變類成員的函式都應聲名為常函式。
const
類物件只能呼叫
const
成員函式,
const
成員函式只能修改
mutable
成員變數(如
mutable int i;
)。int function(const t& a){}//
強制不允許改變
a的內容,如果函式內修改
a,則進行拷貝構造。
volatile
:編譯時不優化。用法類似
const
。只有volatile
成員函式可以訪問
volatile
成員變數。
定義class
時,在class
定義內直接給出函式定義的函式自動成為
inline
函式,而無須使用關鍵字。如不想使用內聯方式,則單獨定義函式。
inline
關鍵字不起作用的兩種情況:
1.函式體過於複雜;
2.函式位址被明引或暗引。
using declares//
指明名空間內具體的乙個函式之類。
using directive//
引用名空間。
static const
陣列的定義必須放在類定義外,
static const
型別中,只有
int的定義可以放在類定義內,並且
int陣列也必須要類定義外定義,其餘內建和自定義型別都不可在類定義內定義。
static initialization dependency
:靜態初始化依賴,當依賴者比被依賴者先初始化時會出錯:
1.別使用靜態依賴
2.將靜態引用全部列入乙個中間檔案
3.以上兩種還無法解決此問題:
a)使用靜態初始化標頭檔案初始化靜態型別,在要使用的地方引用此
.h檔案。這時這個
.h檔案中的物件只在本檔案中可用,再有其他檔案引用此
.h檔案時,因為要引用的型別是
static
的,編譯器會為其他檔案分配單獨的引用型別例項。
b)將靜態型別包裝到函式當中,使用之前呼叫函式強制初始化(因為靜態型別只初始化一次,注意:此時函式的實現不可在
.h檔案中採用內聯方式,因為內聯函式會為每乙個呼叫它的物件複製乙個函式例項,使得靜態型別不止一次初始化)。(推薦)
c++中呼叫
c寫的函式應使用如下方式聲名:
extern 「c」
,或者extern 「c」
,extern 「c」
函式聲名
引用必須定義時初始化。
int x = 0; int& a = x;//
此時表示a是
x的乙個別名,兩者是等價的。
引用方式傳遞引數:實際上是傳遞的物件的乙個引用,函式中可以改變原物件的值。而
const
型別無法以引用方式傳遞(因為它沒有位址,所以無法引用),所以要將函式形式引數聲名為
const
型別。編譯器在需要時會構造臨時物件,這種物件的生命期短到不會引發物件間的衝突。
類內有類(組合
composite
)的情況下,內部類必須有外部類呼叫的建構函式。換句話說,編譯器不會為內部類生成預設建構函式。當組合進行
composite a; composite b = a;
時,composite
及其內部類的拷貝建構函式都會被呼叫(如果沒有的話,編譯器會生成位拷貝型的拷貝建構函式)。所以最好為每個類自定義拷貝建構函式(
x (x&)
)以得到類的控制權。
將拷貝建構函式定義為
private
型別,可以避免系統自動生成拷貝建構函式。
對類內函式使用指標及引用類內函式,最好將其封裝在類內。
子類中重寫(重定義或修改簽名)父類中有過載函式(包括靜態)的眾函式之一時,會導致這個函式的其它過載在繼承類中隱藏。
子類使用父類中
private
型別的方法:在
public
模組中使用語句
using
父類名::
函式名(不帶括號)。
物件導向程式設計語言的三大重要特性:
1.data abstraction; 2. inheritance; 3. polymorphism.
物件切割(
object slicing
),在傳遞物件時我們通常採用傳位址,當傳值時就會發生這樣的現象,較大的物件傳給較小的類
by value
時,就會被截斷。
純虛析構函式(
pure virtual destructor
)必須提供定義,因為它比一般函式特殊。
在析構函式內部呼叫的函式,只呼叫本地版本,虛機制會被略過,以確保安全。
Thinking in C 第2版第一卷讀書筆記
thinking in c pdf電子書 c 中先編譯,後連線 編譯 將原始碼編譯為 連線 將庫函式和各種自定義函式依次連線成為乙個可執行檔案。c 中 include 不再使用 h字尾 include 變在了 include include 呼叫程式 控制台方式 system 程式名 include...
《死亡之旅》 第2版
2005年06月29日 16 03 00 如果你把這本書當作 敏捷軟體開發 這樣的普適的軟工書來讀,希望從裡面找到一些對日常專案有裨益的提議,就不會有什麼收穫。因為這本書只教人如何採取保守主義,實用主義的策略,挺過死亡之旅式的專案而沒有損傷 這是個有趣的話題。因為死亡之旅式的專案一般比較難看,所以很...
《死亡之旅》 第2版
如果你把這本書當作 敏捷軟體開發 這樣的普適的軟工書來讀,希望從裡面找到一些對日常專案有裨益的提議,就不會有什麼收穫。因為這本書只教人如何採取保守主義,實用主義的策略,挺過死亡之旅式的專案而沒有損傷 這是個有趣的話題。因為死亡之旅式的專案一般比較難看,所以很少書籍會從這裡面去總結 最佳實踐 大家更願...