More effiective C 學習筆記一

2021-09-25 08:19:00 字數 3460 閱讀 8637

bbst陣列指標傳遞給bst指標時,因為bbst記憶體比bst大,在遍歷時就會產生錯誤。

#include

using namespace std;

class

bst int xvaule()

};class

bbst

:public bst};

void

printbst

(bst *p,int size)

cout<}int main()

;void

*p = operator new(5

*sizeof

(bbst));

bbst *pt=static_cast>

(p);

for(int i =

0;i<

5;i++

) cout<<

"bst:"

(ar,5)

; cout<<

"bbst:"

(pt,5)

;}編譯輸出:

bst:1

2345

bbst:67

788

notice:學到乙個新知識點:構造乙個沒有預設建構函式的物件陣列

擴充套件:c++ 11 中可以用alloctor類模板實現(目前不會,待學)

express1&&express2時 先計算express1,express1為假時,express2不計算

express1||express2時 先計算express1,express1為真時,express2不計算

過載時因為呼叫的是過載函式所以express2一定會被先計算再傳參。

#include

using namespace std;

typedef unsigned char uchar;

class

bst;

uchar operator &&

(bst x,uchar y)

int main()

cout<<

"y = "

<}

輸出:

y = 1 -------------->y=10

應用一 引用計數

應用二 懶惰提取

從資料庫中提取大型物件資料時,可以只提取暫時需要的。但是物件中的變數應該是mutable以便在const成員函式中修改。

應用三 懶惰表示式計算 (不常見)

大型資料的運算中,可以暫時不全部計算,等到需要用哪一部分資料再進行計算這部分

應用一 使用快取,程式需要被快取的結果時就能減少所需時間。

特別是需要的結果在計算另一結果的同時也能計算出來的情況,如最小/最大

應用二 預讀取,程式需要預讀取的資料時就能減少所需時間。

案例:類中為資料成員預申請記憶體

讀者敘:使用資料頻繁時考慮過度熱情計算法,偶爾才使用的資料考慮懶惰計算法

#include

using namespace std;

class

uint

uint

(int x);}

;const int operator+

(uint a,uint b)

/*int operator+(uint a,int b)

*/uint:

:uint

(int x):n

(x)int main()

輸出結果:

construct uint 9

construct uint 8

這類隱式轉換會導致隱式構造物件,降低**效率。解決方案是刪除上述**注釋。此時輸出結果:

construct uint 9

operator+:

這裡不談深複製和淺複製問題,只談c++什麼時候預設用拷貝建構函式和賦值建構函式。

#includeusing namespace std;

class uint

construct uint 9

copy construct 9

先宣告後賦值,呼叫的是賦值建構函式

int

main()

construct uint 9

construct uint default

assign construct

在具有單引數的建構函式的物件中,賦值初始化會直接呼叫建構函式,因此下面**中的

uint c=10;等同於uint(10);

int main()

結果為

construct uint 10
虛函式注意:

被派生類重定義的虛函式不用必須與基類的虛函式具有一樣的返回型別

虛函式不能定義為內聯函式

在單重繼承情況下,虛函式表的位址存放在類的起始位置

虛函式的應用:虛擬建構函式,虛擬析構函式

操作把類的建構函式以及預設拷貝建構函式宣告在private

阻止派生和嵌入其它類,防止計數混淆

** 所有建構函式為private的類不能作為基類使用 **

定義靜態成員函式,函式內建立類物件並返回該物件

只有在類的成員中才能呼叫私有建構函式

#include

#define num_uplimit -1

using

namespace std;

class

printer

~printer()

;private

:static

int num;

//索引

const

static

int count =2;

//要限制的數量

printer

(const string &);

printer

(const printer &);

};int printer::num=1;

printer::

printer

(const string &s)

num++;}

printer::

~printer()

printer* printer::

makeprinter

(const string &s)

catch

(int x)

return

null;}

intmain()

else

}}

學習筆記 雜湊學習筆記

hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...

學習筆記 CentOS 學習筆記01

簡單的做個課堂筆記 虛擬機器用的是vmware,系統是centos cd etc sysconfig network scripts pwdls 顯示列表 cat ifcfg eth0 檢視檔案內容 vi ifcfg eth0 進入vi編輯器 onboot no 原始設定 x逐字刪除 d刪除整行 a...

筆記 spring cloud 學習筆記

1 spring cloud 是什麼 spring cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具 例如配置管理,服務發現,斷路器,智慧型路由,微 控制匯流排 分布式系統的協調導致了樣板模式,使用spring cloud開發人員可以快速地支援實現這些模式的服務和應用程式。他們將在任...