語言基礎 c 備忘錄

2022-05-22 01:12:10 字數 3700 閱讀 8240

1. c++ 整數型別範圍

可以參照標頭檔案limits.h

定義的巨集

#define int_max       2147483647(

32bit, 

最大10

位十進位制)

#define uint_max      4294967295u(

32bit, 

最大10

位十進位制)

#define llong_max    9223372036854775807ll(

64bit, 

最大19

位十進位制)

#define ulong_max    18446744073709551615ul(

64bit, 

最大20

位十進位制)

2. 防止標頭檔案被包含多次

標頭檔案中往往這樣寫

#ifndef  headerfilename_h

#define headerfilename_h

....your code

#endif

3.變數是這樣宣告的

extern int e; 我們一般不會

extern int e=1; 

因為這樣就算是直接定義了

e,沒必要了;同乙個作用域可以宣告多次,但只能定義一次。

4.string 的一般用法

string s1,s2("string"),s3(s2),s4(5,'c'),s5(s2.being(),s2.end());

char* cp = 「string」;

char c_array = 「string」;

char sb  = ;//無結尾字元陣列

string s6(cp), s7(c_array), s8(c_array,c_array+1);

string s9(sb);//runtime error

if(s1.empty())

cout<

ifstream fin("a");

while(getline(fin,s1))

fin.close();

s1 = s2;// first free s1's memory, second new a memory for s1, third copy data from s2 to s1.

s1 += s2;

s1 += "...";

//一些方法

包含了很多字元操作方法

c_str(); 返回

const char*

insert,assign//替換

rfing//最後一次出現的位置,

find_first_of(args)//args

中任意字元第一次出現的位置,

find_last_of(args)//args

中任意字元最後一次出現的位置,

find_first_not_of(args)//

物件中第乙個不屬於

args

的字元,

find_last_not_of(args)//

物件中最後乙個不屬於

args

的字元。

compare

5. 指向常量的指標和常指標

const int * p = π//常量的指標

,不能通過p改變

pi的值。

pi可以是常量或者是變數。

int * const p = π//常指標

6. 陣列初始化

char a[5] = ; 乙個定長空串,全是

\0int a[3] = ; 其餘會初始化為0;

int a[2][3]=,,};//按行初始化,每行其餘是

0int a[2][3]=;//全部按位址順序初始化,其餘是

07. 函式指標

bool (*pf)(const string &); //定義乙個引數為乙個常字串引用返回型別為

bool

型別的函式指標。

typedef bool (*pf)(const string &); //pf 可以定義函式指標

如果定義了bool myfun(const string &); 

pf test = myfun;或者

pf test = &myfun;

8. 返回引用

返回引用可以避免一些物件的拷貝,節約記憶體以及開闢記憶體的時間。當然返回引用也有其特別的地方,就是有時候可以做左值:

char &get_val(string &s, string::size_type x)

那麼你可以這樣呼叫他:

string s=」1234」;

get_val(s,0) = 『a』;//s的值為」a234」

如果不想讓其成為左值,那麼引數要宣告為「const string & s

」注意:不要返回臨時物件的引用和指標!

9. 靜態變數是被自動初始化的

10. for迴圈定義的迭代變數是區域性的

for(int i=0;i<2;i++)    

}0101

11. palcement new 的使用

palcement new之所以有好處是因為他可以把物件放在一片指定的記憶體之中,如果這個物件建立刪除比較頻繁他會比普通的new有很大優勢。普通的new需要重新尋找一片足夠大的連續記憶體才行。

#include 

#include 

using

namespace

std;  

const

intchunk = 16;  

class

foo  

foo( )   

private

:  int

_val;  

};  

//預分配記憶體,但沒有foo物件

char

*buf = 

newchar

[ sizeof

(foo) * chunk ];  

intmain()  

//到這裡不能再使用pb

delete

buf;  

return

0;  

}12 c++方法隱藏

隱藏就是說方法看不到了,這種情況出現在子類實現了與父類同名的函式(引數不同也可以)。看下面的例子:

class sup

};class sub: public sup

int test(double i)

};int main()

這樣編譯不會通過,原因如下:c++在設計時出於安全考慮,他認為實現子類的人有可能不知道父類的方法,因為在呼叫的時候會呼叫匹配度最高的方法,所以在呼叫d.test()時很可能是程式設計師寫錯了而無意間呼叫了父類方法,這樣錯誤很難排查,所以乾脆吧父類同名方法隱藏。所以在編譯時會報錯,d找不到相應的方法。

如果你非要用base裡面的方法,可以顯示的在子類加上一句

class sub:public sup;

(持續更新中....)

C 基礎備忘錄

1.decimal 型別呼叫tostring 方法後沒把末尾的0去掉的解決辦法 例子 decimal?money convert.todecimal 10.8950 string moneystr money.value.tostring 結果在同一臺機子,兩個專案裡面會出現兩個不同的結果。結果一 ...

C語言程式備忘錄

1 編寫乙個將輸入複製到輸出的程式,並將其中連續多個空格用乙個空格代替。解1 注 從沒想到,無中生有也可以用在這裡。光靠c語言本身力量真的很有限。解2 解3 include void main 注 這個有點意思。看似空格乙個也沒輸出,但最後還是輸出了。關鍵在 當 pre ch 非空格而 ch 為空格...

c 備忘錄模式

結構圖 memento類 儲存狀態的容器 複製 如下 class memento public memento string state caretaker是儲存memento類 複製 如下 class caretaker originator類就是需要儲存狀態的類 複製 如下 class orig...