資源描述:
《C與C++知識(shí)補(bǔ)遺》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、C/C++知識(shí)補(bǔ)遺棧空間的分配方式對(duì)普通的程序開發(fā)來講是沒有意義的,有系統(tǒng)來完成相關(guān)操作,但有時(shí)棧空間的分配方式又會(huì)顯得很重要。棧的分配方式有兩種,其一是從高地址空間向低地址空間分配,其二是從低地址空間向高地址空間分配。那么如何確定??臻g的分配方式呢,下述代碼可以用來確定棧的分配方式。intfun(){staticint*pnt=0;if(pnt==0){intabc;pnt=&abc;fun();}else{intbcd;if(pnt>&bcd){printf("從高地址向低地址分配");//Wind
2、ows的分配方式}else{printf("從低地址向高地址分配");}}return0;}+成員指針的用法。指針可以算作C/C++的短刀利器了,指向類成員的指針包括指向類數(shù)據(jù)成員的指針和指向類方法(函數(shù))的指針,下述代碼演示了這兩種指針的用法classAClass{public:AClass():m_name(0),m_age(0){};AClass(constchar*name);~AClass();public:voidSayHello();voidSayOkay();private:char*m
3、_name;intm_age;public:lv包包、古奇女包、coach包:www.naitiao.com
4、兔毛皮草、獺兔皮草、皮草服飾:www.shideke.comtypedefchar*AClass::*PACName;//引入新的類型(指向數(shù)據(jù)成員的指針)operatorPACName(){return&AClass::m_name;}//執(zhí)行類型轉(zhuǎn)換typedefintAClass::*PACAge;operatorPACAge(){return&AClass::m_age;}typedef
5、void(AClass::*Say)();//指向成員函數(shù)的指針};intfun(void){AClassa("AClass");AClass::Sayfunc=&AClass::SayHello();(a.*func)();//調(diào)用成員函數(shù)AClass*p=&a;func=&AClass::SayOkay;(p->*.func)();//調(diào)用成員函數(shù)printf("%st%d",a.*AClass::PACName(a),a.*AClass::PACAge(a));//數(shù)據(jù)成員指針的使用。PS:
6、是不是有些啰嗦?!}+對(duì)象在內(nèi)存中的布局。了解對(duì)象在內(nèi)存中的布局,可以很方便的通過數(shù)據(jù)成員找到包含該數(shù)據(jù)成員的對(duì)象的地址,續(xù)而執(zhí)行更多的操作,這是C/C++的一個(gè)奇技淫巧。下面是示例代碼structA{inta;doubleb;charc;}intfun(void){Ax;printf("%x,%x,%x,%x,%d",&x,&(x.a),&(x.b),&(x.c),sizeof(x));//運(yùn)行結(jié)果:0x27AC48,0X27AC48,0X27AC50,0x27AC58,24(結(jié)構(gòu)的大小是24而不
7、是13!請(qǐng)參考相關(guān)文檔)//如果知道了x.a的地址,那么x的地址也就知道了。return0;}+lv包包、古奇女包、coach包:www.naitiao.com
8、兔毛皮草、獺兔皮草、皮草服飾:www.shideke.comnew和delete操作符重載。new和delete操作符會(huì)經(jīng)常用到,但對(duì)這兩個(gè)操作符進(jìn)行重載的卻很少,通過這兩個(gè)操作符的重載,很容易實(shí)現(xiàn)把文件當(dāng)內(nèi)存來用。還可以通過這兩個(gè)操作符的重載,來跟蹤內(nèi)存的使用情況,諸如,是否有內(nèi)存泄露等。//完成內(nèi)存使用的跟蹤(通過重載全局new/delet
9、e操作符)void*operatornew(size_tsize,char*file,intline){//此處可以填寫記錄日志代碼returnmalloc(size);}void*operatordelete(void*p){//此處可以填寫記錄日志代碼free(p);}#defineNEW::new#defineDELETE::delete//接下來就需要使用NEW/DELETE替換掉new/delete了。將對(duì)象分配到指定的內(nèi)存空間(主要用作對(duì)象的成員函數(shù)來使用)//重載全局new/delete操
10、作符void*operator(size_tsize,void*p){returnp;}void*delete(void*p){return;}//成員函數(shù)操作符classClassA{public:ClassA();public:void*operatornew(size_t,void*);voidoperatordelete(void*p)};void*ClassA::operatornew(size_tsize,void*p){ret