C++ 笔记点滴
1.while(0)二種用法,一種是用于跳轉(zhuǎn),一種是用于宏
2.聲明變量中的外部變量是用extern,聲明寄存器變量是register.
3.static全局變量,static局部變量,區(qū)別在于:雖然都是存放在全局存儲(chǔ)區(qū),但全局static作用域?yàn)檎麄€(gè)文件,局部static變量作用域?yàn)槁暶鲄^(qū)域。當(dāng)定義它的函數(shù)或語句塊結(jié)束時(shí),其作用域隨之結(jié)束。再次進(jìn)入后又會(huì)恢復(fù)其值。
static函數(shù)則又稱內(nèi)部函數(shù),即只能被當(dāng)前文件使用,其他文件不能調(diào)用。
4.private 靜態(tài)成員數(shù)據(jù)與public靜態(tài)成員數(shù)據(jù)區(qū)別在于private只能由類的成員方法來賦值,不能在其他地方進(jìn)行賦值,包括子類.
5.定義直接寫在類里面的是內(nèi)聯(lián)函數(shù),寫在外面的是外聯(lián)函數(shù)。
6.類數(shù)據(jù)成員指針和類方法指針:定義指向該類的(public)數(shù)據(jù)成員和方法的指針。假如類myclass有數(shù)據(jù)成員public:int c和成員方法int cc();在main就可以定義 int myclass::*pc,pc=&myclass::c,my.*pc=2;int (myclass::*pcc)(),pcc=&myclass:cc;
7.指針數(shù)組和數(shù)組指針。int (*a)[4],指向數(shù)組的指針。int *p[4],數(shù)組元素為指針的數(shù)組。
8.常量指針和指針常量.
char * const pl=string1;
p1=string2;
*p1="this a string";//合法,因?yàn)橹羔榩1所指向的內(nèi)容是可以更新的。
const char* p2=string1;
p2=string2;//指針可以更改.
*p2="this is a string";//非法,p2所指向的字符串是不能更新的。const 在*前面就是常量指針(內(nèi)容是常量),在*后面就是指針常量了。
9.定義常成員函數(shù)。void disp() const{} ,如果不是內(nèi)聯(lián)函數(shù),則在外部也得在尾部加上const.
const int i;常數(shù)據(jù)成員,則要通過構(gòu)造函數(shù)的初始化列表來進(jìn)行初始化:Myclass():x(i);
10.字符串前面加"L","_T","_TEXT",L是將ANSI轉(zhuǎn)換成unicode,_T是根據(jù)環(huán)境設(shè)置(unicode/ansi)來決定轉(zhuǎn)換的結(jié)果._TEXT和_T一樣。只是__TEXT和TEXT是windows宏,:__T、_T和_TEXT是VC宏.unicode與多字節(jié)是二回事,多字節(jié)多指w開頭的.
11.派生類的繼承方式?jīng)Q定著基類成員對(duì)派生類的可見性和基類成員對(duì)派生類對(duì)象的可見性。class a:public b:派生類的對(duì)象可以訪問基類中的公有成員;派生類及派生類的子類的成員函數(shù)可以訪問基類的公有成員和保護(hù)成員。class a:private b:派生類可以訪問基類的公有成員和保護(hù)成員,不能被派生類的子類訪問。基類的所有成員對(duì)派生類對(duì)象都是不可見的。class a:protected b:與private相同,區(qū)別只是基類的公共成員和保護(hù)成員都作為派生類的保護(hù)成員,并且不能被派生類的子類訪問。
12.函數(shù)參數(shù)分為傳值,傳址,引用。傳址為a(int *b);a(&i).引用為a(int &b);a(i);
13.操作系統(tǒng)獲取消息并傳入消息隊(duì)列,在程序里面Getmeessage取得消息,DispatchMessage會(huì)先調(diào)用windows,進(jìn)入管態(tài)(大概是range?? 0),然后再由windows調(diào)用窗口的函數(shù)。為什么這么麻煩?因?yàn)檫@樣windows就可以知道你的程序運(yùn)行到什么情況了, windows來調(diào)用你的窗口,這樣你的窗口返回的時(shí)候windows就知道你已經(jīng)處理過一個(gè)消息了,如果沒有新的消息進(jìn)入消息隊(duì)列, windows就不再會(huì)給你的進(jìn)程分配時(shí)間片.
14.建立的窗口與窗口類就是通過類名稱。WNDCLASSEX.lpszClassName="a"與CreateWindow("a").
15.消息能夠被分為「隊(duì)列化的」和「非隊(duì)列化的」。隊(duì)列化的消息是由Windows放入程序消息隊(duì)列中的。在程序的消息循環(huán)中,重新傳回并分配給窗口消息處理程序。非隊(duì)列化的消息在Windows呼叫窗口時(shí)直接送給窗口消息處理程序。也就是說,隊(duì)列化的消息被「發(fā)送」給消息隊(duì)列,而非隊(duì)列化的消息則「發(fā)送」給窗口消息處理程序。任何情況下,窗口消息處理程序都將獲得窗口所有的消息--包括隊(duì)列化的和非隊(duì)列化的。
16.GetAsyncKeyState與GetKeyState區(qū)別.GetKeyState只能在消息處理過程中來取得按鍵的狀態(tài),要在之外取得狀態(tài)就得用GetAsyncKeyState.
17.char *p = "world";???? // 注意p指向常量字符串 p[0] ='X'; //出錯(cuò),因?yàn)椴荒芨淖兂A恐?這里只能使用數(shù)組而不是指針:char p[]="world";
18:求函數(shù)字符數(shù)組參數(shù)的大小:void func1(TCHAR abc[]? ){?TCHAR strNum[3];wsprintf(strNum,_T("%i"),wcslen(abc));MessageBox(NULL, strNum , abc, MB_YESNO);}
19.函數(shù)的缺省參數(shù)值必須放在聲明處,而內(nèi)聯(lián)函數(shù)inline則必須放在函數(shù)定義處。
20.const類成員的初始化要放在初始化列表里面進(jìn)行。
21.?? int???? GetCount(void)? const;//const成員函數(shù),不能修改數(shù)據(jù)成員的函數(shù)定義.const只用于放到函數(shù)尾部。
22. 所有字符串函數(shù)都盡量用_t開頭的,(_tcslen等),會(huì)自動(dòng)根據(jù)_unicode開頭來選擇使用寬字符還是ansi字符。而包含CCH的則不會(huì)報(bào)錯(cuò),而是截?cái)嘧址?#xff0c;如StringCchCat,StringCchCopy,StringCchPrintf,StringCchPrintfEx等。
23.全局變量會(huì)初始化,而局域變量則是未初始化狀態(tài),是一個(gè)隨機(jī)值。
24.指針引用. int i=111;int *pi=&i;int *&pti=pi; pti是一個(gè)指向指針的引用。引用必須初始化,并且引用是不能重復(fù)定義的.
25.const類成員要修改非const成員變量,則要將該成員變量聲明為mutable.
26.int i=20;這是初始化.int i;i=20;這是賦值。
27.explicit關(guān)鍵字,C++中, 一個(gè)參數(shù)的構(gòu)造函數(shù), 承擔(dān)了兩個(gè)角色。 1 是個(gè)構(gòu)造器 2 是個(gè)默認(rèn)且隱含的類型轉(zhuǎn)換操作符。所以, 有時(shí)候在我們寫下如 AAA = XXX, 這樣的代碼, 且恰好XXX的類型正好是AAA單參數(shù)構(gòu)造器的參數(shù)類型, 這時(shí)候編譯器就自動(dòng)調(diào)用這個(gè)構(gòu)造器, 創(chuàng)建一個(gè)AAA的對(duì)象。
28.關(guān)于在子類的初始化列表中調(diào)用父類的構(gòu)造函數(shù),比方說你想記錄股市交易日志。
class Transaction{public:Transaction(); virsual void logTransaction() const=0//根據(jù)是買還是賣做一份日志};
Transcation::Transaction(){logTransaction();}
class BuyTransacton:public Transcation{virtual void logTransaction()const};
class SellTransaction:public Transcation{virtual void logTransaction()const};
現(xiàn)在,當(dāng)我用BuyTransaction bs;時(shí)由于父類構(gòu)造函數(shù)是最先調(diào)用的,父類構(gòu)造函數(shù)里面調(diào)用的logTransactoin()就不會(huì)是子類版本,在base class構(gòu)造期間,virtual是不會(huì)降到derived class階層的.這時(shí)的解決方法就是不使用virtual,而子類的構(gòu)造函數(shù)將把參數(shù)傳給父類的構(gòu)造函數(shù):
class Transaction{public:explicit Transaction(string &loginfo);void logTransaction(string &loginfo)const;};
Transaction:Transaction(string &loginfo){logTransaction(loginfo);}
class BuyTransaction:public Transaction{public Buytransaction():Transaction(para)};
29.如果類中有虛函數(shù),請(qǐng)將析構(gòu)函數(shù)也設(shè)為虛函數(shù),保證父類與子類能正確調(diào)用析構(gòu)。當(dāng)基類設(shè)為虛函數(shù)后,該類的子類及子子類都是虛函數(shù)。
30.除了內(nèi)置類型外,別的類型盡量用引用傳遞參數(shù),而不是值傳遞,特別是將子類傳遞給一個(gè)父類為參數(shù)的函數(shù)時(shí),將被切除特化信息(好象是指多態(tài)功能丟失)。
31.當(dāng)子父有著與父類同名的函數(shù),那父類函數(shù)就被隱藏了(即使有不同參數(shù)),如想不隱藏,則要在子父里面using 父類。public: using Base::mf1;using Base::mf3;
32.虛函數(shù)盡量聲明為私有或保護(hù)型。子類可以繼承私有虛函數(shù)的。私有繼承的虛函數(shù), 其訪問權(quán)限可由派生類指定.
33.if(i=0) 為假,if(i=1)為真
34.uchar *c;c+=2;指針向右移動(dòng)二位,c[1];//這里取的內(nèi)容為第三位置的內(nèi)容.
?
轉(zhuǎn)載于:https://www.cnblogs.com/i-jie/archive/2009/05/30/1492343.html
總結(jié)
- 上一篇: 失败的项目
- 下一篇: Windows Server 2003活