freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

cc筆試題匯總軟件工程師學(xué)習(xí)用(已修改)

2025-08-22 09:16 本頁面
 

【正文】 心愿下載()免費(fèi)資源下載好去處*(微軟)int func(x){int countx = 0。while(x){countx ++。x = xamp。(x1)。}return countx。} 假定x = 9999。 答案:8思路:將x轉(zhuǎn)化為2進(jìn)制,看含有的1的個(gè)數(shù)。2. 什么是“引用”?申明和使用“引用”要注意哪些問題?答:引用就是某個(gè)目標(biāo)變量的“別名”(alias),對(duì)引用的操作與對(duì)變量直接操作效果完全相同。申明一個(gè)引用的時(shí)候,切記要對(duì)其進(jìn)行初始化。引用聲明完畢后,相當(dāng)于目標(biāo)變量名有 兩個(gè)名稱,即該目標(biāo)原名稱和引用名,不能再把該引用名作為其他變量名的別名。聲明一個(gè)引用,不是新定義了一個(gè)變量,它只表示該引用名是目標(biāo)變量名的一個(gè)別名,它本身不是一種數(shù)據(jù)類型,因此引用本身不占存儲(chǔ)單元,系統(tǒng)也不給引用分配存儲(chǔ)單元。不能建立數(shù)組的引用。!!!!!!!!!!!!!!!!!!!!3. 將“引用”作為函數(shù)參數(shù)有哪些特點(diǎn)?(1)傳遞引用給函數(shù)與傳遞指針的效果是一樣的。這時(shí),被調(diào)函數(shù)的形參就成為原來主調(diào)函數(shù)中的實(shí)參變量或?qū)ο蟮囊粋€(gè)別名來使用,所以在被調(diào)函數(shù)中對(duì)形參變量的操作就是對(duì)其相應(yīng)的目標(biāo)對(duì)象(在主調(diào)函數(shù)中)的操作。(2)使用引用傳遞函數(shù)的參數(shù),在內(nèi)存中并沒有產(chǎn)生實(shí)參的副本,它是直接對(duì)實(shí)參操作;而使用一般變量傳遞函數(shù)的參數(shù),當(dāng)發(fā)生函數(shù)調(diào)用時(shí),需要給形參分配存儲(chǔ)單元,形參變量是實(shí)參變量的副本;如果傳遞的是對(duì)象,還將調(diào)用拷貝構(gòu)造函數(shù)。因此,當(dāng)參數(shù)傳遞的數(shù)據(jù)較大時(shí),用引用比用一般變量傳遞參數(shù)的效率和所占空間都好。(3)使用指針作為函數(shù)的參數(shù)雖然也能達(dá)到與使用引用的效果,但是,在被調(diào)函數(shù)中同樣要給形參分配存儲(chǔ)單元,且需要重復(fù)使用*指針變量名的形式進(jìn)行運(yùn)算,這很容易產(chǎn)生錯(cuò)誤且程序的閱讀性較差;另一方面,在主調(diào)函數(shù)的調(diào)用點(diǎn)處,必須用變量的地址作為實(shí)參?!《酶菀资褂茫逦?。4. 在什么時(shí)候需要使用“常引用”? 如果既要利用引用提高程序的效率,又要保護(hù)傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變,就應(yīng)使用常引用。常引用聲明方式:const 類型標(biāo)識(shí)符 amp。引用名=目標(biāo)變量名;例1int a 。const int amp。ra=a。ra=1。 //錯(cuò)誤a=1。 //正確例2string foo( )。void bar(string amp。 s)。那么下面的表達(dá)式將是非法的:bar(foo( ))。bar(hello world)?!≡蛟谟趂oo( )和hello world串都會(huì)產(chǎn)生一個(gè)臨時(shí)對(duì)象,而在C++中,這些臨時(shí)對(duì)象都是const類型的。因此上面的表達(dá)式就是試圖將一個(gè)const類型的對(duì)象轉(zhuǎn)換為非const類型,這是非法的。引用型參數(shù)應(yīng)該在能被定義為const的情況下,盡量定義為const 。!!!!!!!!!!!!!!!!!!!!5. 將“引用”作為函數(shù)返回值類型的格式、好處和需要遵守的規(guī)則?格式:類型標(biāo)識(shí)符 amp。函數(shù)名(形參列表及類型說明){ //函數(shù)體 }好處:在內(nèi)存中不產(chǎn)生被返回值的副本;(注意:正是因?yàn)檫@點(diǎn)原因,所以返回一個(gè)局部變量的引用是不可取的。因?yàn)殡S著該局部變量生存期的結(jié)束,相應(yīng)的引用也會(huì)失效,產(chǎn)生runtime error!注意事項(xiàng):(1)不能返回局部變量的引用。這條可以參照Effective C++[1]的Item 31。主要原因是局部變量會(huì)在函數(shù)返回后被銷毀,因此被返回的引用就成為了無所指的引用,程序會(huì)進(jìn)入未知 狀態(tài)。(2)不能返回函數(shù)內(nèi)部new分配的內(nèi)存的引用。這條可以參照Effective C++[1]的Item 31。雖然不存在局部變量的被動(dòng)銷毀問題,可對(duì)于這種情況(返回函數(shù)內(nèi)部new分配內(nèi)存的引用),又面臨其它尷尬局面。例如,被函數(shù)返回的引用只是作為一個(gè)臨時(shí)變量出現(xiàn),而沒有被賦予一個(gè)實(shí)際的變量,那么這個(gè)引用所指向的空間(由new分配)就無法釋放,造成memory leak。(3)可以返回類成員的引用,但最好是const。這條原則可以參照Effective C++[1]的Item 30。主要原因是當(dāng)對(duì)象的屬性是與某種業(yè)務(wù)規(guī)則(business rule)相關(guān)聯(lián)的時(shí)候,其賦值常常與某些其它屬性或者對(duì)象的狀態(tài)有關(guān),因此有必要將賦值操作封裝在一個(gè)業(yè)務(wù)規(guī)則當(dāng)中。如果其它對(duì)象可以獲得該屬性的非常量引用(或指針),那么對(duì)該屬性的單純賦值就會(huì)破壞業(yè)務(wù)規(guī)則的完整性。(4)流操作符重載返回值申明為“引用”的作用:流操作符和,這兩個(gè)操作符常常希望被連續(xù)使用,例如:cout hello endl。 因此這兩個(gè)操作符的返回值應(yīng)該是一個(gè)仍然支持這兩個(gè)操作符的流引用??蛇x的其它方案包括:返回一個(gè)流對(duì)象和返回一個(gè)流對(duì)象指針。但是對(duì)于返回一個(gè)流對(duì)象,程序必須重新(拷貝)構(gòu)造一個(gè)新的流對(duì)象,也就是說,連續(xù)的兩個(gè)操作符實(shí)際上是針對(duì)不同對(duì)象的!這無法讓人接受。對(duì)于返回一個(gè)流指針則不能連續(xù)使用操作符。因此,返回一個(gè)流對(duì)象引用是惟一選擇。這個(gè)唯一選擇很關(guān)鍵,它說明了引用的重要性以及無可替代性,也許這就是C++ 語言中引入引用這個(gè)概念的原因吧。賦值操作符=。這個(gè)操作符象流操作符一樣,是可以連續(xù)使用的,例如:x = j = 10?;蛘?x=10)=100。賦值操作符的返回值必須是一個(gè)左值,以便可以被繼續(xù)賦值。因此引用成了這個(gè)操作符的惟一返回值選擇。例3#i nclude int amp。put(int n)。int vals[10]。int error=1。void main(){put(0)=10。 //以put(0)函數(shù)值作為左值,等價(jià)于vals[0]=10。put(9)=20。 //以put(9)函數(shù)值作為左值,等價(jià)于vals[9]=20。 coutvals[0]。coutvals[9]。}int amp。put(int n){if (n=0 amp。amp。 n=9 ) return vals[n]。else { coutsubscript error。 return error。 }}(5)在另外的一些操作符中,卻千萬不能返回引用:+*/ 四則運(yùn)算符。它們不能返回引用,Effective C++[1]的Item23詳細(xì)的討論了這個(gè)問題。主要原因是這四個(gè)操作符沒有side effect,因此,它們必須構(gòu)造一個(gè)對(duì)象作為返回值,可選的方案包括:返回一個(gè)對(duì)象、返回一個(gè)局部 變量的引用,返回一個(gè)new分配的對(duì)象的引用、返回一個(gè)靜態(tài)對(duì)象引用。根據(jù)前面提到的引用作為返回值的三個(gè)規(guī)則,第3兩個(gè)方案都被否決了。靜態(tài)對(duì)象的引用又因?yàn)?(a+b) == (c+d))會(huì)永遠(yuǎn)為true而導(dǎo)致錯(cuò)誤。所以可選的只剩下返回一個(gè)對(duì)象了。!!!!!!!!!!!!!!!!!!!!6. “引用”與多態(tài)的關(guān)系?引用是除指針外另一個(gè)可以產(chǎn)生多態(tài)效果的手段。這意味著,一個(gè)基類的引用可以指向它的派生類實(shí)例。例4Class A。 Class B : Class A{...}。 B b。 Aamp。 ref = b。7. “引用”與指針的區(qū)別是什么?指針通過某個(gè)指針變量指向一個(gè)對(duì)象后,對(duì)它所指向的變量間接操作。程序中使用指針,程序的可讀性差;而引用本身就是目標(biāo)變量的別名,對(duì)引用的操作就是對(duì)目標(biāo)變量的操作。此外,就是上面提到的對(duì)函數(shù)傳ref和pointer的區(qū)別?!?. 什么時(shí)候需要“引用”?流操作符和、賦值操作符=的返回值、拷貝構(gòu)造函數(shù)的參數(shù)、賦值操作符=的參數(shù)、其它情況都推薦使用引用。以上 28 參考:9. 結(jié)構(gòu)與聯(lián)合有和區(qū)別?1. 結(jié)構(gòu)和聯(lián)合都是由多個(gè)不同的數(shù)據(jù)類型成員組成, 但在任何同一時(shí)刻, 聯(lián)合中只存放了一個(gè)被選中的成員(所有成員共用一塊地址空間), 而結(jié)構(gòu)的所有成員都存在(不同成員的存放地址不同)。 2. 對(duì)于聯(lián)合的不同成員賦值, 將會(huì)對(duì)其它成員重寫, 原來成員的值就不存在了, 而對(duì)于結(jié)構(gòu)的不同成員賦值是互不影響的。10. 下面關(guān)于“聯(lián)合”的題目的輸出?a)#i nclude union{ int i。char x[2]。}a。void main(){[0] = 10。[1] = 1。printf(%d,)。}答案:266 (低位低地址,高位高地址,內(nèi)存占用情況是Ox010A)b)main(){union{ /*定義一個(gè)聯(lián)合*/int i。struct{ /*在聯(lián)合中定義一個(gè)結(jié)構(gòu)*/ char first。char second。}half。}number。=0x4241。 /*聯(lián)合成員賦值*/printf(%c%c\n, , )。=39。a39。 /*聯(lián)合中結(jié)構(gòu)成員賦值*/=39。b39。printf(%x\n, )。getch()。} 答案: AB (0x41對(duì)應(yīng)39。A39。,是低位;Ox42對(duì)應(yīng)39。B39。,是高位)6261 ()11. 已知strcpy的函數(shù)原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不調(diào)用C++/C 的字符串庫函數(shù),請(qǐng)編寫函數(shù) strcpy。答案:char *strcpy(char *strDest, const char *strSrc){if ( strDest == NULL || strSrc == NULL)return NULL 。if ( strDest == strSrc)return strDest 。char *tempptr = strDest 。while( (*strDest++ = *strSrc++) != ‘\0’)。return tempptr 。}!!!!!!!!!!!!!!!!!!!!12. 已知String類定義如下: class String{public:String(const char *str = NULL)。 // 通用構(gòu)造函數(shù)String(const String amp。another)。 // 拷貝構(gòu)造函數(shù)~ String()。 // 析構(gòu)函數(shù)String amp。 operater =(const String amp。rhs)。 // 賦值函數(shù)private:char *m_data。 // 用于保存字符串}。嘗試寫出類的成員函數(shù)實(shí)現(xiàn)。答案:String::String(const char *str){ if ( str == NULL ) //strlen在參數(shù)為NULL時(shí)會(huì)拋異常才會(huì)有這步判斷{m_data = new char[1] 。m_data[0] = 39。\039。 。}else{m_data = new char[strlen(str) + 1]。strcpy(m_data,str)。}} String::String(const String amp。another){m_data = new char[strlen() + 1]。strcpy(m_data,)。}Stringamp。 String::operator =(const String amp。rhs){ if ( this == amp。rhs)return *this 。delete []m_data。 //刪除原來的數(shù)據(jù),新開一塊內(nèi)存m_data = new char[strlen() + 1]。strcpy(m_data,)。return *this 。}String::~String(){delete []m_data 。} 13. .h頭文件中的ifndef/define/endif 的作用?答:防止該頭文件被重復(fù)引用。14. #i nclude 與 #i nclude 的區(qū)別?答:前者是從Standard 。++ 程序中調(diào)用被C 編譯器編譯后的函數(shù),為什么要加extern “C”?首先,作為extern是C/C++語言中表明函數(shù)和全局變量作用范圍(可見性)的關(guān)鍵字,該關(guān)鍵字告訴編譯器,其聲明的函數(shù)和變量可以在本模塊或其它模塊中使用。通常,在模塊的頭文件中對(duì)本模塊提供給其它模塊引用的函數(shù)和全局變量以關(guān)鍵字extern聲明。例如,如果模塊B欲引用該模塊A中定義的全局變量和函數(shù)時(shí)只需包含模塊A的頭文件即可。這樣,模塊B中調(diào)用模塊A中的函數(shù)時(shí),在編譯階段,模塊B雖然找不到該函數(shù),但是并不會(huì)報(bào)錯(cuò);它會(huì)在連接階段中從模塊A編譯生成的目標(biāo)代碼中找到此函數(shù)extern C是連接申明(linkage declaration),被extern C修飾的變量和函數(shù)是按照C語言方式 編譯和連接的,來看看C++中對(duì)類似C的函數(shù)是怎樣編譯的:作為一種面向?qū)ο蟮恼Z言,C++支持函數(shù)重載,而過程式語言C則不支持。函數(shù)被C++編譯后在符號(hào)庫中的名字與C語言的不同。例如,假設(shè)某個(gè)函數(shù)的原型為:void foo( int x, int y )?! ≡摵瘮?shù)被C編譯器編譯后在符號(hào)庫中的名字為_foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類的名字(不同的編譯器可能生成的名字不同,但是都采用了相同的機(jī)制,生成的新名字稱為“mangled name”)。_foo_int_int 這樣的名字包含了函數(shù)名、函數(shù)參數(shù)數(shù)量及類型信息,C++就是靠這種機(jī)制來實(shí)現(xiàn)函數(shù)重載的。例如,在C++中,函數(shù)void foo( int x, int y )與void foo( int x, float y )編譯生成的符號(hào)是不相同的,后者為_foo_int_float。同樣地,C++中的變量除支持局部變量外,還支持類成員變量和全局變量。用戶所編寫程序的
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1