




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、使用ODBC API開發(fā)數(shù)據(jù)庫應(yīng)用程序的步驟是什么?連接數(shù)據(jù)源。分配語句句柄。準備并執(zhí)行SQL語句。獲取結(jié)果集。提交事務(wù)。斷開數(shù)據(jù)源連接并釋放環(huán)境句柄。關(guān)鍵字static的作用是什么?這個簡單的問題很少有人能回答完全。在C語言中,關(guān)鍵字static有三個明顯的作用:1). 在函數(shù)體,一個被聲明為靜態(tài)的變量,該變量的內(nèi)存只被分配一次,在這一函數(shù)被調(diào)用過程中維持其值不變。2). 在模塊內(nèi)(但在函數(shù)體外),一個被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問。它是一個本地的全局變量。3). 在模塊內(nèi),一個被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個函數(shù)被限制在
2、聲明它的模塊的本地范圍內(nèi)使用。(4)在類中的static成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;(5)在類中的static成員函數(shù)屬于整個類所擁有,這個函數(shù)不接收this指針,因而只能訪問類的static成員變量。 關(guān)鍵字const是什么含義只要能說出const意味著“只讀”就可以了。const int a; ,a是一個常整型數(shù)int const a; ,a是一個常整型數(shù)const int *a; a是一個指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)int * const a; a是一個指向整型數(shù)的常指針(也就是說,指針指向的整型數(shù)是可以修改的,但指針是
3、不可修改的)int const * a const; 一個意味著a是一個指向常整型數(shù)的常指針(也就是說,指針指向的整型數(shù)是不可修改的,同時指針也是不可修改的)1). 關(guān)鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數(shù)為常量是為了告訴了用戶這個參數(shù)的應(yīng)用目的。如果你曾花很多時間清理其它人留下的垃圾,你就會很快學(xué)會感謝這點多余的信息。(當(dāng)然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。)2). 通過給優(yōu)化器一些附加的信息,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼。3). 合理地使用關(guān)鍵字const可以使編譯器很自然地保護那些不希望被改變的參數(shù),防止其被無
4、意的代碼修改。簡而言之,這樣可以減少bug的出現(xiàn)。作用:(1)欲阻止一個變量被改變,可以使用const關(guān)鍵字。在定義該const變量時,通常需要對它進行初始化,因為以后就沒有機會再去改變它了;(2)對指針來說,可以指定指針本身為const,也可以指定指針?biāo)傅臄?shù)據(jù)為const,或二者同時指定為const;(3)在一個函數(shù)聲明中,const可以修飾形參,表明它是一個輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;(4)對于類的成員函數(shù),若指定其為const類型,則表明其是一個常函數(shù),不能修改類的成員變量;(5)對于類的成員函數(shù),有時候必須指定其返回值為const類型,以使得其返回值不為“左值”。例如:cons
5、t classA operator*(const classA& a1,const classA& a2);operator*的返回結(jié)果必須是一個const對象。如果不是,這樣的變態(tài)代碼也不會編譯出錯:classA a, b, c;(a * b) = c; / 對a*b的結(jié)果賦值操作(a * b) = c顯然不符合編程者的初衷,也沒有任何意義。關(guān)鍵字volatile有什么含意 并給出三個不同的例子。一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設(shè)這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而
6、不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:1). 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)2). 一個中斷服務(wù)子程序中會訪問到的非自動變量(Non-automatic variables)3). 多線程應(yīng)用中被幾個任務(wù)共享的變量分別給出BOOL,int,float,指針變量 與“零值”比較的 if 語句(假設(shè)變量名為var)解答:BOOL型變量:if(!var)int型變量: if(var=0)float型變量:const float EPSINON = 0.00001;if (x >= EPSINON) && (x <= EPSINON)指
7、針變量: if(var=NULL)數(shù)組名1、數(shù)組名作為函數(shù)形參時,淪為普通指針。僅僅只是一個指針;在失去其內(nèi)涵的同時,它還失去了其常量特性,可以作自增、自減等操作,可以被修改。void Func ( char str100 )sizeof( str ) = ? /答案4 2、數(shù)組名指代一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)就是數(shù)組;例如:char str10;cout sizeof(str) endl;輸出結(jié)果為10,str指代數(shù)據(jù)結(jié)構(gòu)char10。3、數(shù)組名可以轉(zhuǎn)換為指向其指代實體的指針,而且是一個指針常量,不能作自增、自減等操作,不能被修改;char str10;str+; /編譯出錯,提示str不是
8、左值寫一個“標(biāo)準”宏MIN,這個宏輸入兩個參數(shù)并返回較小的一個#define MIN(A,B) (A) <= (B) ? (A) : (B)為什么標(biāo)準頭文件都有類似以下的結(jié)構(gòu)? #ifndef _INCvxWorksh#define _INCvxWorksh#ifdef _cplusplus /防止被重復(fù)引用extern “C” #endif#ifdef _cplusplus#endif#endif /* _INCvxWorksh */作為一種面向?qū)ο蟮恼Z言,C+支持函數(shù)重載,而過程式語言C則不支持。函數(shù)被C+編譯后在symbol庫中的名字與C語言的不同。例如,假設(shè)某個函數(shù)的原
9、型為: void foo(int x, int y);該函數(shù)被C編譯器編譯后在symbol庫中的名字為_foo,而C+編譯器則會產(chǎn)生像_foo_int_int之類的名字。_foo_int_int這樣的名字包含了函數(shù)名和函數(shù)參數(shù)數(shù)量及類型信息,C+就是考這種機制來實現(xiàn)函數(shù)重載的。為了實現(xiàn)C和C+的混合編程,C+提供了C連接交換指定符號extern “C”來解決名字匹配問題,函數(shù)聲明前加上extern “C”后,則編譯器就會按照C語言的方式將該函數(shù)編譯為_foo,這樣C語言中就可以調(diào)用C+的函數(shù)了。編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù),已知類String的原型為:class
10、Stringpublic:String(const char *str = NULL); / 普通構(gòu)造函數(shù)String(const String &other); / 拷貝構(gòu)造函數(shù) String(void); / 析構(gòu)函數(shù)String & operate =(const String &other); / 賦值函數(shù)private:char *m_data; / 用于保存字符串;解答:/普通構(gòu)造函數(shù)String:String(const char *str)if(str=NULL)m_data = new char1; / 得分點:對空字符串自動申請存放結(jié)束標(biāo)志0的空/加
11、分點:對m_data加NULL 判斷*m_data = 0;elseint length = strlen(str);m_data = new charlength+1; / 若能加 NULL 判斷則更好strcpy(m_data, str);/ String的析構(gòu)函數(shù)String:String(void)delete m_data; / 或delete m_data;/拷貝構(gòu)造函數(shù)String:String(const String &other) / 得分點:輸入?yún)?shù)為const型int length = strlen(other.m_data);m_data = new char
12、length+1; /加分點:對m_data加NULL 判斷strcpy(m_data, other.m_data);/賦值函數(shù)String & String:operate =(const String &other) / 得分點:輸入?yún)?shù)為const型if(this = &other) /得分點:檢查自賦值return *this;delete m_data; /得分點:釋放原有的內(nèi)存資源int length = strlen( other.m_data );m_data = new charlength+1; /加分點:對m_data加NULL 判斷strcpy(
13、 m_data, other.m_data );return *this; /得分點:返回本對象的引用區(qū)別引用與指針有什么區(qū)別?答 1) 引用必須被初始化,指針不必。2) 引用初始化以后不能被改變,指針可以改變所指的對象。3) 不存在指向空值的引用,但是存在指向空值的指針。全局變量和局部變量在內(nèi)存中是否有區(qū)別? 答 、全局變量儲存在靜態(tài)數(shù)據(jù)區(qū),局部變量在堆棧中。類成員函數(shù)的重載、覆蓋和隱藏區(qū)別?a. 成員函數(shù)被重載的特征:(1)相同的范圍(在同一個類中);(2)函數(shù)名字相同;(3)參數(shù)不同;(4)virtual 關(guān)鍵字可有可無。b.覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:(1)不同的范圍(分別
14、位于派生類與基類);(2)函數(shù)名字相同;(3)參數(shù)相同;(4)基類函數(shù)必須有virtual 關(guān)鍵字。c.“隱藏”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:(1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時,不論有無virtual關(guān)鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。(2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual 關(guān)鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆)Struct與class的區(qū)別答案:struct 的成員默認是公有的,而類的成員默認是私有的。struct 和 class 在其他方面是功能相當(dāng)?shù)?。從感情上講,大多數(shù)的
15、開發(fā)者感到類和結(jié)構(gòu)有很大的差別。感覺上結(jié)構(gòu)僅僅象一堆缺乏封裝和功能的開放的內(nèi)存位,而類就象活的并且可靠的社會成員,它有智能服務(wù),有牢固的封裝屏障和一個良好定義的接口。既然大多數(shù)人都這么認為,那么只有在你的類有很少的方法并且有公有數(shù)據(jù)(這種事情在良好設(shè)計的系統(tǒng)中是存在的!)時,你也許應(yīng)該使用 struct 關(guān)鍵字,否則,你應(yīng)該使用 class 關(guān)鍵字。枚舉與#define的區(qū)別1),#define 宏常量是在預(yù)編譯階段進行簡單替換。枚舉常量則是在編譯的時候確定其值。2),一般在編譯器里,可以調(diào)試枚舉常量,但是不能調(diào)試宏常量。3),枚舉可以一次定義大量相關(guān)的常量,而#define 宏一次只能定義一
16、個。exit與return的區(qū)別exit()函數(shù)在退出程序后會將控制權(quán)交回給操作系統(tǒng)當(dāng)通過return語句從一般函數(shù)返回時控制權(quán)將交給調(diào)用該函數(shù)的函數(shù)在main()函數(shù)中使用return語句返回后,控制權(quán)將交給操作系統(tǒng),因此在主函數(shù)中return語句的功能與exit()函數(shù)功能相同。指針常量const char*, char const*, char*const的區(qū)別問題幾乎是C+面試中每次都會有的題目。把一個聲明從右向左讀。char * const cp; ( * 讀成 pointer to )cp is a const pointer to charconst char * p;p is
17、a pointer to const char;char const * p;同上因為C+里面沒有const*的運算符,所以const只能屬于前面的類型。鏈表和數(shù)組二者都屬于一種數(shù)據(jù)結(jié)構(gòu)從邏輯結(jié)構(gòu)來看1. 數(shù)組必須事先定義固定的長度(元素個數(shù)),不能適應(yīng)數(shù)據(jù)動態(tài)地增減的情況。當(dāng)數(shù)據(jù)增加時,可能超出原先定義的元素個數(shù);當(dāng)數(shù)據(jù)減少時,造成內(nèi)存浪費;數(shù)組可以根據(jù)下標(biāo)直接存取。2. 鏈表動態(tài)地進行存儲分配,可以適應(yīng)數(shù)據(jù)動態(tài)地增減的情況,且可以方便地插入、刪除數(shù)據(jù)項。(數(shù)組中插入、刪除數(shù)據(jù)項時,需要移動其它數(shù)據(jù)項,非常繁瑣)鏈表必須根據(jù)next指針找到下一個元素從內(nèi)存存儲來看1. (靜態(tài))數(shù)組從棧中分配
18、空間, 對于程序員方便快速,但是自由度小2. 鏈表從堆中分配空間, 自由度大但是申請管理比較麻煩 從上面的比較可以看出,如果需要快速訪問數(shù)據(jù),很少或不插入和刪除元素,就應(yīng)該用數(shù)組;相反, 如果需要經(jīng)常插入和刪除元素就需要用鏈表數(shù)據(jù)結(jié)構(gòu)了。Sizeof和strlen sizeof是運算符,計算數(shù)據(jù)所占的內(nèi)存空間;strlen()是一個函數(shù),計算字符數(shù)組的字符數(shù); sizeof可以用類型作參數(shù);strlen()只能用char*作參數(shù),必須是以/0結(jié)束 數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了; sizeof操作符的結(jié)果類型是size_t,它在頭文件中typedef為unsigned int類型。該類型保證能容納實現(xiàn)建立的最大對象的字節(jié)大小/為了實現(xiàn)鏈式操作,將目的地址返回,加3分! char * strcpy( char *strDest, const char *strSrc ) assert( (strDest != NULL) && (strSrc != NULL) ); c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中藥藥材購銷合同范例
- 代謝工程改造大腸桿菌合成3-巖藻糖基乳糖
- 個體采購合同范例
- 中國留學(xué)中介合同范例
- 介紹傭金合同范例
- 山西省黃河流域農(nóng)業(yè)高質(zhì)量發(fā)展時空演變及影響因素
- 個人債務(wù)代償合同范例
- 個人農(nóng)田轉(zhuǎn)租合同范例
- 選擇性復(fù)習(xí)增強中學(xué)生生物學(xué)知識記憶效果的實證研究
- 供電英文合同范例
- 海洋工程裝備技術(shù)專業(yè)人才培養(yǎng)方案(高職)
- 教科版三年級科學(xué)下冊 《各種各樣的運動》 教學(xué)課件
- 浙江杭州余杭區(qū)余杭街道招考聘用編外人員16人(必考題)模擬卷及答案
- 腹腔穿刺術(shù)(僅供參考)課件
- 四川大學(xué)C語言上機考試題
- 2022年蕪湖職業(yè)技術(shù)學(xué)院職業(yè)適應(yīng)性測試題庫及答案解析
- 免費推廣軟件大全匯總
- 建筑公司一般部門設(shè)置與崗位職責(zé)
- 法蘭理論重量表正式版
- 三年級下冊口算天天100題(A4打印版)(共32頁)
- 企業(yè)經(jīng)營沙盤模擬課件 99頁PPT
評論
0/150
提交評論