面向對象程序設計試題集多套_第1頁
面向對象程序設計試題集多套_第2頁
面向對象程序設計試題集多套_第3頁
面向對象程序設計試題集多套_第4頁
面向對象程序設計試題集多套_第5頁
已閱讀5頁,還剩268頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

資料內容僅供您學習參考,如有不當或者侵權,請聯系改正或者刪除。目錄C++面向對象程序設計模擬測試題 2計算機技術與軟件水平考試面向對象程序設計試題(1) 39計算機技術與軟件水平考試面向對象程序設計試題(2) 41計算機技術與軟件水平考試面向對象程序設計試題(3) 47計算機技術與軟件水平考試面向對象程序設計試題(4) 54計算機技術與軟件水平考試面向對象程序設計試題(5) 58計算機技術與軟件水平考試面向對象程序設計試題(6) 64面向對象程序設計試題(6)參考答案 67計算機技術與軟件水平考試面向對象程序設計試題(7) 69面向對象程序設計試題(7)參考答案 74全國計算機及應用面向對象程序設計試卷 75高等教育自學考試面向對象程序設計試題 79《面向對象程序設計》期末考試(開)試題及答案 86計科開放本科網絡專業(yè)面向對象程序設計試題 94【面向對象程序設計】全國試題及答案 101【面向對象程序設計】全國試題及答案 110【面向對象程序設計】試題及答案 118C++面向對象程序設計模擬測試題一.選擇填空1.下面關于對象概念的描述中,(A)是錯誤的。A.對象就是C語言中的結構變量;B.對象代表著正在創(chuàng)立的系統(tǒng)中的一個實體;C.對象是一個狀態(tài)和操作(或方法)的封裝體;D.對象之間的信息傳遞是經過消息進行的2.下面關于類概念的描述中,(D)是錯誤的。A.類是抽象數據類型的實現:B.類是具有共同行為的若干對象的統(tǒng)一描述體;C.類是創(chuàng)立對象的樣板:D.類就是C語言中的結構類型3.在16位機中,int型字寬為(A)字節(jié)。A.2;B.4;C.6;D.84.類型修飾符unsigned修飾(D)類型是錯誤的。A.char;B.int;C.longint;D.float5.在inta[5]={1,3,5};中,數組元素a[1]的值是(C)。A.1;B.0;C.3;D.26.在intb[][3]={{1},{3,2},{4,5,6},{0}};中b[2][2]的值是(C)。A.0;B.5;C.6;D.27.下列表示式中,(C)是非法的。已知:inta=5;floatb=5.5;A.a%3+b;B.b*b&&++a;C.(.a>b)+(int(b)%2);D.―――a+b8.下列表示式中,(D)是合法的。已知:doublem=3.2;intn=3;A.m<<2;B.(m+n)|n;C.!m*=n;D.m=5,n=3.1,m+n9.下列for循環(huán)的次數為(B)。for(inti=0,x=0;!x&&i<=5;i++)A.5;B.6;C.1;D.無限10.下列while循環(huán)的次數是(A)。while(inti=0)i――;A.0;B.1;C.5;D.無限11.下述關于break語句的描述中,(C)是不正確的。A.break語句可用于循環(huán)體內,它將退出該重循環(huán);B.break語句可用于開關語句中,它將退出開關語句;C.break語句可用于if體內,它將退出if語句;D.break語句在一個循環(huán)體內能夠出現多次。12.下列關于開關語句的描述中,(A)是正確的。A.開關語句中default子句能夠沒有,也可有一個;B.開關語句中每個語句序列中必須有break語句;C.開關語句中default子句只能放在最后;D.開關語句中case子句后面的表示式能夠是整型表示式。13.在一個被調用函數中,關于return語句使用的描述,(D)是錯誤的。A.被調用函數中能夠不用return語句;B.被調用函數中能夠使用多個return語句;C.被調用函數中,如果有返回值,就一定要有return語句;D.被調用函數中,一個return語句可返回多個值給調用函數。14.下列的(D)是引用調用。A.形參是指針,實參是地址值;B.形參和實參都是變量;C.形參是數組名,實參是數組名;D.形參是引用,實參是變量。15.在傳值調用中,要求(C)。A.形參和實參類型任意,個數相等;B.實參和形參類型都完全一致,個數相等;C.實參和形參對應的類型一致,個數相等;D.實參和形參對應的類型一致,個數任意。16.在C++中,關于下列設置參數默認值的描述中,(C)是正確的。A.不允許設置參數的默認值;B.設置參數默認值只能在定義函數時設置;C.設置參數默認值時,應該是先設置右邊的再設置左邊的;D.設置參數默認值時,應該全部參數都設置。17.重載函數在調用時選擇的依據中,(D)是錯誤的。A.參數個數;B.參數的類型;C.函數名字;D.函數的類型18.采用函數重載的目的在于(D)。A.實現共享;B.減少空間;C.提高速度;D.使用方便,提高可讀性19.在下列關鍵字中,用以說明類中公有成員的是(A)。A.public;B.private;C.protected;D.friend;20.下列的各類函數中,(C)不是類的成員函數。A.構造函數;B析構函數;C.友元函數;D.拷貝初始化構造函數21.作用域運算符的功能是(D)。A.標識作用域的級別的;B.指出作用域的范圍的;C.給定作用域的大小的;D.標識某個成員是屬于哪個類的。22.(D)不是構造函數的特征。A.構造函數的函數名與類名相同;B.構造函數能夠重載;C.構造函數能夠設置缺省參數;D.構造函數必須指定類型說明。23.(A)是析構函數的特征。A.一個類中只能定義一個析構函數;B.析構函數名與類名不同;C.析構函數的定義只能在類體內;D.析構函數能夠有一個或多個參數。24.一般的拷貝初始化構造函數的參數是(C)。A.某個對象名;B.某個對象的成員名;C.某個對象的引用名;D.某個對象的指針名。25.關于成員函數特征的下述描述中,(A)是錯誤的。A.成員函數一定是內聯函數;B.成員函數能夠重載;C.成員函數能夠設置參數的缺省值;D.成員函數能夠是靜態(tài)的。26.下述靜態(tài)數據成員的特征中,(A)是錯誤的。A.說明靜態(tài)數據成員時前邊要加修飾符static;B.靜態(tài)數據成員要在類體外進行初始化;C.引用靜態(tài)數據成員時,要在靜態(tài)數據成員名前加<類名>和作用域運算符;D.靜態(tài)數據成員不是所有對象所共用的。27.友元的作用(A)。A.提高訪問對象成員的效率;B.加強類的封裝性;C.實現數據的隱藏性;D.增加成員函數的種類。28.已知:類A中一個成員函數說明如下:voidSet(A&a);其中,A&a的含意是(C)A.指向類A的指針為a;B.將a的地址值賦給變量Set;C.a是類A的對象引用,用來作函數Set()的形參;D.變量A與a按位相與作為函數Set()的參數。29.下列關于對象數組的描述中,(D)是錯誤的。A.對象數組的下標是從0開始的;B.對象數組的數組名是一個常量指針;C.對象數組的每個元素是同一個類的對象;D.對象數組只能賦初值,而不能被賦值。30.已知:print()函數是一個類的常成員函數,它無返回值,下列表示中,(A)是正確的。A.voidprint()const;B.constvoidprint();C.voidconstprint;D.voidprint(const);31.關于new運算符的下列描述中,(D)是錯誤的。A.它能夠用來動態(tài)創(chuàng)立對象和對象數組;B.使用它創(chuàng)立的對象或對象數組能夠使用運算符delete刪除;C.使用它創(chuàng)立對象時要調用構造函數;D.使用它創(chuàng)立對象數組時必須指定初始值。32.關于delete運算符的下列描述中,(C)是錯誤的。A.它必須用于new返回的指針;B.它也適用于空指針;C.對一個指針能夠使用多次該運算符;D.指針名前只用一對方括號符,不論所刪除數組的維數。33.下列說明中,constchar*ptr;ptr應該是(C)A.指向字符常量的指針;B.指向字符的常量指針;C.指向字符串常量的指針;D.指向字符串的常量指針;34.下列定義中,(B)是定義指向數組的指針p。A.int*p[5];B.int(*p)[5];C.(int*)p[5];D.int*p[];35.下列對派生類的描述中,(D)是錯誤的。A.一個派生類能夠作另一個派生類的基類;B.派生類至少有一個基類;C.派生類的成員除了它自己的成員外,還包含了它的基類的成員;D.派生類中繼承的基類成員的訪問權限到派生類保持不變。36.派生類的對象對它的基類成員中(A)是能夠訪問的。A.公有繼承的公有成員;B.公有繼承的私有成員;C.公有繼承的保護成員;D.私有繼承的公有成員;37.派生類的構造函數的成員初始化列中,不能包含(C)。A.基類的構造函數;B.派生類中子對象的初始化;C.基類的子對象初始化;D.派生類中一般數據成員的初始化。38.關于多繼承二義性的描述中,(C)是錯誤的。A.一個派生類的兩個基類中都有某個同名成員,在派生類中對這個成員的訪問可能出現二義性;B.解決二義性的最常見的方法是對成員名的限定法;C.基類和派生中同時出現的同名函數,也存在二義性問題;D.一個派生類是從兩個基類派生來的,而這兩個基類又有一個共同的基類,對該基類成員進行訪問時,也可能出現二義性。39.設置虛基類的目的是(B)。A.簡化程序;B.消除二義性;C.提高運行效率;D.減少目標代碼。40.帶有虛基類的多層派生類構造函數的成員初始化列表中都要列出虛基類的構造函數,這樣將對虛基類的子對象初始化(D)。A.與虛基類下面的派生類個數有關;B.多次;C.二次;D.一次。41.對定義重載函數的下列要求中,(D)是錯誤的。A.要求參數的個數不同;B.要求參數中至少有一個類型不同;C.要求參數個數相同時,參數類型不同;D.要求函數的返回值不同。42.下列函數中,(C)不能重載。A.成員函數;B.非成員函數;C.析構函數;D.構造函數。43.下列對重載函數的描述中,(A)是錯誤的。A.重載函數中不允許使用缺省參數;B.重載函數中編譯器根據參數表進行選擇;C.不要使用重載函數來描述毫無相干的函數;D.構造函數重載將會給初始化帶來多種方式。44.關于虛函數的描述中,(C)是正確的。A.虛函數是一個static類型的成員函數;B.虛函數是一個非成員函數;C.基類中說明了虛函數后,派生類中將其對應的函數可不必說明為虛函數;D.派生類的虛函數與基類的虛函數具有不同的參數個數和類型。45.關于純虛函數和抽象類的描述中,(C)是錯誤的。A.純虛函數是一種特殊的虛函數,它沒有具體的實現;B.抽象類是指具有純虛函數的類;C.一個基類說明有純虛函數,該基類的派生類一定不再是抽象類;D.抽象類只能作為基類來使用,其純虛函數的實現由派生類給出。46.下列描述中,(D)是抽象類的特征。A.能夠說明虛函數;B.能夠進行構造函數重載;C.能夠定義友元函數;D.不能說明其對象。47.面向對象程序設計中的數據隱藏指的是(D)A.輸入數據必須輸入保密口令B.數據經過加密處理C.對象內部數據結構上建有防火墻D.對象內部數據結構的不可訪問性[解析]輸入數據必須輸入保密口令和數據經過加密處理都不是面向對象程序設計的特征;對象內部數據結構上也不可能建有防火墻,因此它們都不是面向對象程序設計中所指的數據隱藏。面向對象程序設計系統(tǒng)中的封裝單位是對象,對象之間只能經過接口進行信息交流,外部不能對對象中的數據隨意地進行訪問,這就造成了對象內部數據結構的不可訪問性,也使得數據被隱藏在對象中。這就是面向對象程序設計中的數據隱藏所指。48.下列各項中不符合函數重載必須滿足的條件的是(C)A.有不同的參數個數B.對應的參數類型不相同C.A和B必須同時滿足D.A和B只要滿足一個即可[解析]我們知道,在同一個作用域中,要實現函數重載必須滿足的條件的是:①有不同的參數個數;或者②對應的參數有不相同的數據類型,即①和②中只要有一個滿足就能夠了。當然兩者都滿足更好,但這不是必須的。49.下列帶缺省值參數的函數說明中,正確的說明是(A)A.intFun(intx,inty=2,intz=3);B.intFun(intx=1,inty,intz=3);C.intFun(intx,inty=2,intz);D.intFun(intx=1,inty,intz=3);[解析]在帶缺省值參數的函數說明中,正確的說明應該是無缺省值的參數依次排列在參數表的左邊,排完無缺省值的參數后,再依次排列帶缺省值的參數。從所給出的四個選項來看,只有"intFun(intx,inty=2,intz=3)"符合這條規(guī)定,其它的都不符合。50.有如下的對類"CSample"的說明,其中(A)是錯誤的。classCSample{A.inta=23;B.CSample();public:C.CSample(intval);D.~CSample();}[解析]在下面對類"CSample"說明中,"CSample()"和"CSample(intval)"是該類重載的構造函數."~CSample()"是該類的析構函數,這三個語句都是正確的。錯誤的語句是"inta=23",因為它違反了在類的聲明(不論是引用性聲明,還是定義性聲明)中都不能以賦值表示式的形式給它的數據成員進行初始化。51.已知類A中的一個成員函數的說明如下:voidSet(A&a);則該函數的參數"A&a"的含義是(C)A.指向A的指針為aB.將變量a的地址賦給類AC.類A對象引用a用作函數的形參D.變量A與a按位與后作函數參數[解析]因為A是一個類,因此"A&a"表示a是類A的對象,但因為對象a的前綴了符號"&",則"&a"表示是類A的對象引用。因此"A&a"的含義是類A對象引用a用作函數的形參。52.若類A和類B的定義如下:classA{public:inti,j;voidget();};classB:A{inti,j;protected:intk;public:voidmake();};voidB::make(){k=i*j;}則上述語句中(D)是非法的表示。A.voidget();B.intk;C.voidmake();D.k=i*j;[解析]對于給定的四項中,前三項都是正確的,只有第四項是錯誤的。因為,類B是類A的私有派生類(缺省訪問類型),因此A中的公類型的數據成員在類B中成為了私有數據成員,但函數"voidB::make()"既然是類B的成員函數,則既可訪問類A中的公有數據成員,也能訪問類B中的私有數據成員,則表示式"k=i*j;"造成了訪問的二義性,即其中的i和j,到底是取自類A呢?還是取自類B呢?53.下面的主函數體中,(A)是錯誤的。classA{inti;public:virtualvoidfun()=0;A(inta){i=a;}};classB:publicA{intj;public:voidfun(){cout<<"B::fun()\n";}B(intb,intc):A(b){j=c;}};voidmain()A.{Aa(5);}B.{A*pa;}C.{Bb(7);}D.{B*pb;}[解析]在類A中,函數"virtualvoidfun()=0"為純虛函數,因此,類A為抽象類。作為抽象類,它是不能被用來定義具體對象的,而語句"Aa(5);"恰恰是定義抽象類的對象的,因此它是錯誤的54.拷貝構造函數的作用是(C)A.進行數據類型的轉換B.用對象調用成員函數C.用對象初始化對象D.用一般類型的數據初始化對象[解析]進行數據類型的轉換和用一般類型的數據初始化對象都是一般構造函數的功能。用對象調用成員函數不用構造函數,只要用"對象名.成員函數名"即可。因此拷貝(復制)構造函數的作用,只能是用對象來初始化對象。55.下列說法中,正確的說法是(B)A.所有的運算符都能被重載B.運算符被重載時,它們的優(yōu)先級與結合性不會改變C.當需要時,我們能夠自定義一個運算符來進行重載D.每個運算符都能夠被重載成成員函數和友元函數[解析]當重載運算符時,不是所有的運算符都能被重載,有幾個運算符是不能被重載的,如三目運算符'?:','.','*','::'.'#'等;也不是每個運算符都能夠被重載成成員函數和友元函數,如運算符'=','()','[]'和'->'都只能被重載成成員函數;無論何時,都不能自定義運算符來進行重載,也即重載只能對已有運算符進行;可是運算符被重載時,它們的優(yōu)先級與結合性不會改變。56.下面對結構或類中成員的訪問中,不正確的訪問是(A)A.*pointer.salary;(其中pointer為指向類對象的指針)B.pointer->salary;C.x=worker.salary;(其中worker為具有類類型的對象)D.Location&rA=A1;intx=rA.GetX();(Location為已定義的類,A為對象)[解析]因pointer為指向類對象的指針,因此"pointer->salary"是正確的訪問數據成員的形式;因worker為具有類類型的對象,因此"worker.salary"也是正確的訪問數據成員的形式;因Location為已定義的類,A1為對象,因此"Location&rA=A1;intx=rA.GetX();"表示以對象A1初始化對象引用rA,然后由對象引用rA調用成員函數GetX()給變量x賦值,這樣的訪問成員函數的形式也是正確的;"*pointer.salary;"中,因為運算符'.'的優(yōu)先級高于運算符'*'的優(yōu)先級,因此相當于"*(pointer.salary);",那正確的形式應該是"*(pointer->salary);"。故"*pointer.salary"是不正確的訪問。57.以下不屬于存取權限的是(B)。A.publicB.staticC.protectedD.private58.以下敘述中正確的是(D)A.在C++中數據封裝是經過各種類型來實現的B.在C++中,數據封裝能夠由struct關鍵字提供C.數據封裝就是使用結構類型將數據代碼連接在一起D.數據封裝以后,依然能夠不經過使用函數就能直接存取數據。59.以下敘述中不正確的是:(D)A.對象之間能夠相互賦值B.對象能夠用作數組的元素C.對象能夠用作函數參數D.一個對象不能用作另一個對象的成員59..以下敘述中正確的是:(B)A.在定義構造函數時能夠指定返回類型B.在定義析構函數時不能指定參數C.一個類只能有一個構造函數D.在一個類能夠有多個析構函數60.假定類A已經定義,對于以A為基類的單一繼承類B,以下定義中正確的是:(A)A.classB:publicA{//...};B.classA:publicB{//...};C.classB:publicclassA{//...};D.classA:classBpublic{//...};61.下面敘述不正確的是:(D)A.派生類一般都用公有派生;B.對基類成員的訪問必須是無二義性的;C.賦值兼容原則也適用于多重繼承的組合;D.基類的公有成員在派生類中依然是公有的。62.C++類體系中,不能被派生類繼承的有(A)。A.轉換函數.構造函數B.構造函數.賦值操作函數C.虛函數.靜態(tài)成員函數D.靜態(tài)成員函數.轉換函數63.以下基類中的成員函數(C)表示純虛函數A.virtualvoidvf(int);B.voidvf(int)=0;C.virtualvoidvf()=0;D.virtualvoidvf(int){}64.經過一個對象調用虛函數時,C++系統(tǒng)對該調用采用(A)。A.動態(tài)聯編B.靜態(tài)聯編C.不確定是哪種聯編D.函數重載65.以下敘述不正確的是(C)A.轉換函數不能帶有參數B.轉換函數不能指定返回類型C.轉換函數不能說明為虛函數D.一個類能夠有多個轉換函數66.有如下一個函數模板:template<classT>Tmax(Tx,Ty){return(x>y)?(x):(y);}當對T傳給char*類型時,則可能產生錯誤結果,因此應該為這個函數模板提供一個(C)A.模板實例B.特定模板函數C.重載函數模板D.替換模板67.下面的針對在C++中說明類的各種建議中,(C)是不正確的。A.盡量使類接口既完整又最緊湊B.盡量少用constC.避免對指針和數值類型重載D.明確禁用無端隱含生成的成員函數68.一個C++程序至少應包含(B)個函數。A.0B.1C69.在微型機上,一個unsignedint型變量在內存中占(B)個字節(jié)的存儲空間。A.1B.2C.370.下面語句中(C)是非法的。A.inta=3,b=3;B.inta,b=3;C.inta=b=3;D.inta=3,b71.下述語句intx,i=3;x=(i++)+(i++)+(i++);執(zhí)行后,x的結果為(A)。A.9B.15C72.設a=12,n=5,則表示式a%=(n%=2)運算后,a的值為(A).A.0B.173.設a=3,b=2,c=l,則表示式a=b>c的值為(A).A.0B.174.C++編譯器一般不提供對(C.)的檢查。A.函數原型B.變量類型C.數組邊界D.指針類型75.只有(D)變量才能說明為extern變量。A.全局變量B.靜態(tài)變量C.寄存器變量D.自動變量76.設有兩個int型的指針p1和p2,則p1和p2(B)。A.能夠相加,但不能夠相減B.能夠相減,但不能夠相加C.既不能相加,也不能相減D.能夠相加,也能夠相減78.假設已定義了一個字符型指針char*p;欲使指針指向常量串"Ilovechina!",可用語句(B)來完成。A.*p="IloveChina!";B.p="IloveChina!";C.*p->'IloveChina!";D.p->"IloveChina!"79.下面關鍵字中(D)不能夠剛來定義類。A.classB.structC.unionD.enum80.一個類的構造函數(D).A.能夠有不同的返回類犁B.只能返回整型C.只能返回void型D.沒有任何返同類刑81.若類X是類Y的友元類,則下列訪問關系中(B)是正確的A.類X的成員不能訪問類Y的私有成員B.類X的成員能夠訪問類Y的私有成員C.類Y的成員能夠訪問類X的私有成員D.僅類Y的公共成員可訪問類X的私有成員82.在c++中,一個虛函數是經過關鍵字(A)放在其基類說明的前面來加以說明的A.virtualB.protectedC.operatorD.this83.在派生關系中,(A)。A.構造函數和釋放函數是不能繼承的B.構造函數能夠繼承,但釋放函數不能夠繼承C.構造函數不能夠繼承,但釋放函數能夠繼承D.構造函數和釋放函數都能繼承84.下列標識符中(A)是正確的。A.suml23B.suml23$C.*pt_123D.Sum-Count85.下面語句中(C)是非法的。A.charx='C';B.charx='#';C.charx="*";D.charx='$';86.設x=1.2,y=2.0,則語句z=(int)x+y:執(zhí)行后,x的結果為(D)A.3.2B.187.設n=l,b=2,則表示式a&b的值為(A)。A.0B.188.全局變量的作用域限于(B)。A整個程序B.從定義變量的位置開始到本源文件結束C.本源文件D.從定義變量的位置開始到本程序結束89.在C++語言中,數組能夠作為函數的參數,但若用數組名作函數的實參,則將(C)傳遞到被調函數中去?!整個數組B.數組的第一個元素C.數組地址D.整個數組的拷貝90.發(fā)生函數調用時,主調函數將實參傳遞給被調函數,在被調函數執(zhí)行過程中,實參的值(C)。A.是能夠改變的B.是不可改變的C.能夠經過指針間接改變D.是數組時能夠改變91.語句int*p[n]和int(*p)[n]的含義分別是(B)。Aint*p[n]定義了一個數組指針,int(*p)[n]定義了一個指針數組B.int*p[n]定義了一個指針數紐,int(*p)[n]定義了一個數組指針Lint*p[n]定義了一個數組指針,int(*p)[n]定義了一個數組指針D.int*p[n]定義了—個指針數組,int(*p)[n]定義了一個指針數組92.若有如下枚舉類型enumweekday{mon,tue,wed,thu=100,Fri,sat};則wed的取值為(A)。A.2B.3C.9993.只有(D)變量才能說明為register變量。A全局變量B.靜態(tài)變量C.外部變量D.自動變量94.欲使一整型指針p指向一整型變量x,下面哪種方式最好?(C)A.intx,*p;*p=x;B.intx,*p;*p=&x;C.intx;int*p=&x;D.intx,*p;p=x;95.在C++中,一個變量一旦用const修飾,便無法對其進行重寫,其生存期一直持續(xù)到(D)。A.所在源文件的末尾B.程序結束C.編譯結束D.其作用域結束96.在C++中,當為一個變量定義引用時,引用類型(A)。A.必須與變量類型一致B.不一定與變量類型一致C.也即變量的指針D.也即變量的地址97.在用C++定義類時,下面哪個關鍵字可用以對類成員進行修飾?(C)A.externB.autoC.staticD.register98.在C++的類中以成員函數方式重載雙目運算符時,只能指定(A)。A.一個參數B.兩個參數C.二個參數D.不能指定參數99.在C++中,對于基類的protected成員,當以protected方式派生一個新類時。該成員將成為派生類的(B)成員。A.privateB.protectedC.publicD.非法100.C++的基類指針能夠訪問派生類對象,但不能訪問派生類對象的(D)成員。A.privateB.protectedC.publicD.新增101.在C++中,當一個對象被創(chuàng)立后,它的每一個成員函數都含有一個系統(tǒng)自動生成的隱含的指針,稱之為(D)指針。A.對象B.派生C基類D.this102.凡是能用以派生新類,卻不能創(chuàng)立自己的對象的類稱為(B)。A.虛基類B.抽象類C容器類D.派生類103.以下不正確的敘述是(D)。A在C++程序中,逗號運算符的優(yōu)先級最低。B.在C++程序中,APH和aph是兩個不同的變量。C.若a和b類型相同,在計算了賦值表示式a=b后b中的值將放人a中,而b中的值不變D.當從鍵盤輸入數據時,對于整型變量只能輸入整型數值,對于實型變量只能輸入實型數值104.以下符合C++語法的賦值表示式是(B)。A.d=9+e+f=d+9B.d=9+e,f=d+9C.d=9+e,e++,d+9D.d=9+e++=d+7105.設變量a是整型,f是實型,i是雙精度型,則表示式10+'a'+i*f值的數據類型是(C.)。A.intB.floatC.doubleD.不確定106.已知ch是字符型變量,下面不正確的賦值語句是(A)。A.ch='a+b';B.ch='\0';C.ch='7'+'9';D.ch=5+9;107.下面關鍵字中(D)不能夠用來定義類?A.classB.structC.unionD.enum108.以下描述中正確的是(D)。A.for循環(huán)只能用于循環(huán)次數已經確定的情況B.for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表示式C.在for循環(huán)中,不能用break語句跳出循環(huán)體D.for循環(huán)的循環(huán)體語句中,能夠包含多條語句,但必須用花括號括起來二.判斷下列描述的正確性,對者劃√,錯者劃×。1.C++引進了引用的概念,對編程帶來了很多方便。(√)2.C++允許使用友元,可是友元會破壞封裝性。(√)3.轉義序列表示法只能表示字符不能表示數字。(×)4.引用是用來給某個變量以別名的變量。對引用的操作,實質上就是對被引用的變量的操作。(√)5.在C++中,傳址調用將被引用調用所替代。(√)6.所有的函數在定義它的程序中都是可見的。(×)7.使用關鍵字class定義的類中缺省的訪問權限是私有(private)的。(√)8.作用域運算符(∷)只能用來限定成員函數所屬的類。(×)9.構造函數和析構函數都不能重載。(×)10.所謂私有成員是指只有類中所提供的成員函數才能直接使用它們,任何類以外的函數對它們的訪問都是非法的。(×)11.某類中的友元類的所有成員函數能夠存取或修改該類中的私有成員。(√)12.如果一個成員函數只存取一個類的靜態(tài)數據成員,則可將該成員函數說明為靜態(tài)成員函數。(√)13.指向對象的指針與對象都能夠作函數參數,可是使用前者比后者好些。(√)14.對象引用作函數參數比用對象指針更方便些。(√)15.對象數組的元素能夠是不同類的對象。(×)16.constchar*p說明了p是指向字符串的常量指針。(×)17.C++語言中,既允許單繼承,又允許多繼承。(√)18.派生類的繼承方式有兩種,公有繼承和私有繼承。(×)19.在公有繼承中,基類中只有公有成員對派生對象是可見的。(×)20.在私有繼承中,基類中只有公有成員對派生類是可見的。(√)21.構造函數能夠被繼承。(×)22.析構函數不能被繼承。(√)23.多繼承情況下,派生類的構造函數的執(zhí)行順序取決于定義派生時所指定的各基類的順序。(√)24.解決多繼承情況下出現的二義性的方法之一是使用成員名限定法。(√)25.函數的參數個數和類型都相同,只是返回值不同,這不是重載函數。(√)26.多數運算符能夠重載,個別運算符不能重載,運算符重載是經過函數定義實現的。(√)27.對每個可重載的運算符來講,它既能夠重載為友元函數,又能夠重載為成員函數,還能夠重載為非成員函數。(×)28.對單目運算符重載為友元函數時,說明一個形參;重載為成員函數時,不能顯式說明形參。(√)29.重載運算符保持原運算符的優(yōu)先級和結合性不變。(√)30.虛函數是用virtual關鍵字說明的成員函數。(√)31.構造函數說明為純虛函數是沒有意義的。(√)32.抽象類是指一些沒有說明對象的類。(×)33.動態(tài)聯編是在運行時選定調用的成員函數的。(√)34.使用提取符(<<)能夠輸出各種類型的變量的值,也能夠輸出指針值.(×)35.靜態(tài)變量在整個程序的運行過程中始終都是存在著的。(√)36.一個變量的指針就是該變量地址所指向的存儲單元。(√)37.在C++中,能夠定義一個指向函數的指針。(√)38.C++語言不允許把一個結構作為一個整體進行輸入輸出。(√)39.在C++中定義數組時,任何時候都不能夠省略下標。(×)40.對于inta[1],能夠用a++來指向數組的第二個元素。(×)41.C++對常量也能夠建立引用。(√)42.在定義一個類時,不能在類說明中對數據成員使用表示式進行初始化。(√)43.如果在類聲明中沒有定義拷貝構造函數,就不能用一個對象去初始化另一個對象。(×)44.一個指向基類的指針能夠訪問從基類派生出來的任何對象。(√)45.C++語言函數不能進行嵌套定義。(√)46.語句int*p():定義了一個指向函數的指針。(√)47.在C++語言中,數據類型的轉換必須是顯式的。(×)48.發(fā)生傳值調用時,形參和實參各占一個獨立的存儲空間。(√)49.C++語言不能定義字符串變量。(√)50.在C++中,當存在一個與模板函數同名的普通函數時,調用的順序是模板函數優(yōu)先。(×)51.C++的虛函數必須是類的一個成員,而不允許是類的友元。(√)三.寫出下列程序的輸出結果1.引用參數#include<iostream.h>voidswap(int&,int&);voidmain(){inta=5,b=8;cout<<"a="<<a<<","<<"b="<<b<<endl;swap(a,b);cout<<"a="<<a<<","<<"b="<<b<<endl;}voidswap(int&x,int&y){inttemp=x;x=y;y=temp;}執(zhí)行該程序后,輸出結果如下:a=5,b=8a=8,b=51.返回引用#include<iostream.h>int&f1(intn,ints[]){int&m=s[n];returnm;}voidmain(){ints[]={5,4,3,2,1,0};f1(3,s)=10;cout<<f1(3,s)<<endl;}執(zhí)行該程序后,輸出結果如下:102.構造.析構函數調用#include<iostream.h>classA{private:inta,b;public:A();A(inti,intj);voidprint();};A::A(){a=b=0;cout<<"Defaultconstructoriscalled.\n";}A::A(inti,intj){a=i;b=j;cout<<"Constructoriscalled.\n";}voidA::print(){cout<<"a="<<a<<","<<"b="<<b<<endl;}voidmain(){Am,n(4,8);m.print();n.print();}執(zhí)行該程序后,輸出結果如下:Defaultconstructoriscalled.Constructoriscalled.a=0,b=0a=4,b=82.構造.析構函數調用#include<iostream.h>classTDate{private:intyear,month,day;public:TDate(inty,intm,intd);~TDate();voidprint();};TDate::TDate(inty,intm,intd){year=y;month=m;day=d;cout<<"Constructoriscalled."<<endl;}TDate::~TDate(){cout<<"Destructoriscalled.\n";}voidTDate::print(){cout<<year<<"."<<month<<"."<<day<<endl;}voidmain(){TDatetoday(,1,10),tomorrow(,1,111);cout<<"Todayis";today.print();cout<<"Tomorrowis";tomorrow.print();}執(zhí)行該程序后,輸出結果如下:Constructoriscalled.Constructoriscalled.Todayis.1.10Tomorrowis.1.11Destructoriscalled.3.對象指針作參數#include<iostream.h>classM{private:intx,y;public:M(){x=y=0;}M(inti,intj){x=i;y=j;}voidcopy(M*m);voidsetxy(inti,intj){x=i;y=j;}voidprint(){cout<<x<<","<<y<<endl;}};voidM::copy(M*m){x=m->x;y=m->y;}voidfun(Mm1,M*m2);voidmain(){Mp(5,7),q;q.copy(&p);fun(p,&q);p.print();q.print();}voidfun(Mm1,M*m2){m1.setxy(12,15);m2->setxy(22,25);}執(zhí)行該程序后,輸出結果如后:5,722,253.對象引用作參數#include<iostream.h>classA{private:intm;public:A(inti=0){m=i;cout<<"Constructoriscalled.\n";}voidset(inti){m=i;}voidprint()const{cout<<m<<endl;}~A(){cout<<"Destructoriscalled.\n";}};voidfun(constA&c){C.print();}voidmain(){fun(5);}執(zhí)行該程序后,輸出結果如下:Constructoriscalled.5Destructoriscalled.4.派生#include<iostream.h>classA{inta,b;public:A(inti,intj){a=i;b=j;}voidmove(intx,inty){a+=x;b+=y;}voidshow(){cout<<"("<<a<<","<<b<<")\n";}};classB:privateA{intx,y;public:B(inti,intj,intk,intl):A(i,j){x=k;y=l;}voidshow(){cout<<x<<","<<y<<endl;}voidfun(){move(3,5);}voidf1(){A::show();}};voidmain(){Ae(1,2);e.show();Bd(3,4,5,6);D.fun();D.show();D.f1();}執(zhí)行該程序后,輸出結果如下:(1,2)5,6(6,9)4.派生#include<iostream.h>classA{inta,b;public:A(inti,intj){a=i;b=j;}voidmove(intx,inty){a+=x;b+=y;}voidshow(){cout<<"("<<a<<","<<b<<")\n";}};classB:publicA{intx,y;public:B(inti,intj,intk,intl):A(i,j),x(k),y(l){}voidshow(){cout<<x<<","<<y<<endl;}voidfun(){move(3,5);}voidf1(){A::show();}};voidmain(){Ae(1,2);e.show();Bd(3,4,5,6);D.fun();D.A::show();D.B::show();D.f1();}執(zhí)行該程序后,輸出結果如下:(1,2)(6,9)5,6(6,9)5.虛函數與派生#include<iostream.h>classB{protected:intb;public:B(inti){b=i+50;show();}B(){}virtualvoidshow(){cout<<"B::show()iscalled.b="<<b<<endl;}};classD:publicB{protected:intd;public:D(inti):B(i){d=i+100;show();}D(){}voidshow(){cout<<"D::show()iscalleD.d="<<d<<endl;}};voidmain(){Dd1(108);}執(zhí)行該程序后,輸出結果如下:B::show()iscalled.b=158D::show()iscalleD.d=2085.虛函數與派生#include<iostream.h>classA{public:A(){}virtualvoidf(){cout<<"A::f()iscalleD.\n";}};classB:publicA{public:B(){f();}voidg(){f();}};classC:publicB{public:C(){}virtualvoidf(){cout<<"C::f()iscalled.\n";}};voidmain(){Cc;C.g();}執(zhí)行該程序后,輸出結果如下:A::f()iscalled.C::f()iscalled.6.請分析以下的程序,給出該程序的正確執(zhí)行結果。#include<iostream.h>intadd(intx,inty){returnx+y;}voidmain(){intm=2,n=3;cout<<"1:"<<add(m++,m+n)<<endl;m=2,n=3;cout<<"2:"<<add(++m,m+n)<<endl;m=2,n=3;cout<<"3:"<<<endl;m=2,n=3;cout<<"4:"<<<endl;}答:1:72:83:84:9[解析]在說明答案之前,要說明兩個問題:(1)C++語言中,函數參數是壓在棧里的,因壓棧是從前往后進行的,因此出棧就是從后向前進行的,也即先取最后的參數,然后再向前逐個取用;(2)對于單加運算,m++是先執(zhí)行后加1,++m是加1后再執(zhí)行。由此,因m=2,n=3;,因此:1:(m++)+(m+n)=2+(2+3)=7(m++后執(zhí)行,且后加1,因此m=2一直未變)2:(++m)+(m+n)=3+(2+3)=8(++m后執(zhí)行,但先加1,執(zhí)行++m時,m=3了)3:(m+n)+(m++)=(3+3)+2=8(先執(zhí)行m++,后加1,執(zhí)行m+n時,m=3了)4:(m+n)+(++m)=(3+3)+3=9;(先執(zhí)行++m,且先加1,故一開始就有m=3)7.請分析下面的程序并給出該程序的執(zhí)行結果。#include<iostream.h>classAA{inta;public:AA(){cout<<"InitualizingAA!\n";}~AA(){cout<<"DestroyingAA!\n";};classBB{intb;AAp;public:BB(){cout<<"InitualizingBB!\n";}~BB(){cout<<"DestroyingBB!\n";};voidmain(){BBX;cout<<"Endingmain!\n";}答:InitualizingAA!InitualizingBB!Endingmain!DestroyingBB!DestroyingAA![解析]雖然在主程序中只定義了一個類BB的對象,但在類BB中聲明了類AA的對象作為它的數據成員。當一個類中含有對象作為數據成員時,在生成對象時,先調用成員對象的構造函數,再調用類自己的構造函數,因此輸出了"InitualizingAA!"(成員對象構造函數的輸出)和"InitualizingBB!"(類自己構造函數的輸出)。對象生成后,執(zhí)行下一句輸出語句,則輸出"Endingmain!"。此時程序結束,調用析構函數來析構掉對象,先調用類自身的析構函數,其輸出為"DestroyingBB!",再調用成員對象的析構函數,其輸出為"DestroyingAA!"。8.寫出下列程序的運行結果。#include<iostream.h>classAA{inta;public:AA(inti){a=i;cout<<"AA="<<a<<"\n";}virtual~AA(){cout<<"~AA="<<a<<"\n";}};classBB:publicAA{intb;public:BB(inti,intj):AA(i){b=j;cout<<"BB="<<b<<"\n";}~BB(){cout<<"~BB="<<b<<"\n";}};voidmain(){AA*pa=newAA(8);deletepa;AA*pb=newBB(6,9);deletepb;}答:AA=8~AA=8AA=6BB=9~BB=9~AA=6[解析]語句"AA*pa=newAA(8);"動態(tài)生成一個類AA的對象并把它的地址賦給對象指針"pa",為此系統(tǒng)調用了AA的構造函數,輸出AA=8。接下來,執(zhí)行語句"deletepa;"刪除該對象指針,其實是刪除了動態(tài)生成的對象,因此調用類AA的析構函數,輸出~AA=8。接著執(zhí)行語句"AA*pb=newBB(6,9);",動態(tài)生成一個類BB的對象,并將其地址賦給類AA的指針"pb"。在生成派生類BB對象時,系統(tǒng)首先調用基類AA的構造函數輸出AA=6,然后調用派生類BB的構造函數輸出BB=9。最后執(zhí)行語句"deletepb;",由于基類AA的析構函數被定義為虛函數,因此在運行時是動態(tài)聯編的。故系統(tǒng)先調用派生類BB的析構函數輸出~BB=9,再調用基類AA的析構函數輸出~AA=6(若基類析構函數非虛函數,則只輸出~AA=6)。9.寫出下列程序的運行結果。#include<iostream.h>classAA{public:staticintn;AA(){n++;}};intAA::n=0;main(){cout<<"AA::n="<<AA::n<<endl;AAd1;cout<<<d1.n<<endl;AAd2;cout<<<D2.n<<endl;AAd3,d4;cout<<<d1.n<<endl;cout<<<d2.n<<endl;}答:AA::n=0d1.n=1d2.n=2d1.n=4d2.n=4[解析]由于數據成員n的訪問屬性是公有的,因此在類外可訪問它;又它是靜態(tài)變量,因此具有全局性。在構造函數中,執(zhí)行的是n++操作,即每次調用構造函數n就加1。當程序開始時,因未定義對象,因此n的值為初始化時的值,則輸出為"AA::n=0"。當定義了對象d1后,由于調用了構造函數,則該對象中n=1,故輸出"d1.n=1"。同理,對象d2輸出"d2.n=2"。由于接下來生成了兩個對象d3和d4,調用兩次構造函數,n兩次加1,此時n=4,因此下面兩條語句的輸出為"d1.n=4"和"d2.n=4"。10.寫出下列程序的輸出結果。#include<iostream.h>classAA{public:AA{}{cout<<"ConstructorofAA.\n";fun();}virtualvoidfun(){cout<<"AA::fun()iscalled.\n";}};classBB:publicAA{public:BB(){cout<<"ConstructorofBB.\n";fun();}voidfun(){cout<<"BB::fun()iscalled.\n";}};voidmain(){BBd;}答:ConstructorofAA.AA::fun()iscalled.ConstructorofBB.BB::fun()iscalled.[解析]雖然函數fun()說明為虛函數,但當在構造函數中被調用時,呈現的是靜態(tài)聯編,即基類和派生類都調用各自的函數fun()。因此,當生成對象d時,先調用基類的構造函數,在構造函數中又調用自己的函數"fun()",因此輸出為"ConstructorofAA."和"AA::fun()iscalled."。同理調用派生類的構造函數時,生成的輸出為"ConstructorofBB."和"BB::fun()iscalled."。11.請給出下面的程序的輸出結果。#include<iostream.h>templatevoidsort(T*a,intn){Tnum;for(inti=0;i<N-1;i++){for(intj=i;j<N-1;j++)if(a[j]>a[j+1]){num=a[j];a[j]=a[j+1];a[j+1]=num;}}for(i=0;i<N;I++)cout<<A[I];cout<<endl;}voidmain(){intiver[5]={12,45,9,23,37};doubledver[5]={22.3,56.7,43.5,13.8,8.6};sort(iver,5);sort(dver,.5);}答:9122337458.613.822.343.556.7[解析]這是使用模板的例子。函數sort是一個遞增的排序函數,T是個模板。當數組是整型數據類型時,它為整型數組排序;當數組為雙精度數據類型時,它為雙精度數組排序。因此輸出如上結果。12.給出如下程序運行結果:intmain(){intnum=50;int&ref=num;ref=ref+10;cout<<"num="<<num<<endl;num=num+40;cont<<"ref="<<ref<<endl;return0;}13.給出如下程序運行結果:classtest{private:intnum;public:test();intgetint(){returnnum;}~test();};test::test(){num=0;}test::~test(){cout<<"Destuctorisactive"<<endl;}voidmain(){testx[3];cout<<"Exitingmain"<<endl;}14.#include<iostream.h>voidmain()intb[3][5]={11,12,13,14,15,21,22,23,24,25,31,32,33,34,35};int(*p)[5]:p=b;For(intj=0;j<5;j++)cout<<*(*p+j)<<",";cout<<endl;}15.#include<iostream.h>#definePI3.1415926#defineFUDGE(k)k*PI;#definePR(a)cout<<"a"<<int(a)<<"\t";#definePRINT(a)PR(a);cout<<"\n";#definePRINT2(a,b)PR(a);PRlNT(b);#definePRINT3(3,b,c)PR(a):PRINT2(b,c);#defineMAX(a,b)(a<b?b:a)voidmain(){intx=2;PRINT(x*FUDGE(2));for(intcel=0;cel<=100;cel+=50)PRINT2(cel,9.15*cel+32);intx=l,y=2;PRINT3(MAX(x++,y),x,y);PRINT3(MAX(x++,y),x,y):}16.#include<iostream.h>#defineN8voidmain(){voidprint(int);print(l):}voidprint(intn){cout<<"W";if(n>=N)return;elseprint(++n);}17.#include<iostream.h>#include<string.h>classstring{private;char*str;public;string(char*s);~string();voidprint();};classperson{private:stringname;intage:charsex;public;person(char*n,intage,chars);~person();voidprint();};string::string(char*s){str=newchar[strlen(s)+1];strcpy(str,s);cout<<"stringconstructor:"<<this->str<<endl;}string::~string(){cout<<"stringdestructor:"<<this->str<<endl;deletestr;}voidstring::print(){cout<<str;}person::person(char*n,inta,chars):name(n){age=a;sex=s;cout<<"personconstructor:"<<this->age<<endl;person::~person();cout<<"persondestructor:"<<this->age<<endl;}voidperson::print(){cout<<"name:":name.print();cout<<",age:"<<age<<",sex:"<<sex<<endl;}voidmain(){persona("zhong",20,'W');personb("li",10,"F");A.print();B.print();}18.#include<iostream.h>voidswapl(inta,intb){inttemp=a:a=b:b=temp;}voidswap2(int*a,int*b){inttemp=*a;*a=*b:*b=temp;)voidswap3(int*a,int*b){int*temp=a:a=b:b=temp;}voidswap4(int&a,int&b){inttemp=a;a=b;b=temp;}voidmain(){inta=10,b=20:swapl(a,b);cout<<a<<':'<<b<<endl;swap2(&a,&b);cout<<a<<':'<<b<<endl;swap3(&a,&b);cout<<a<<':'<<b<<endl;swap4(a,b);cout<<a<<':'<<b<<endl;}19.#include<iostream.h>#include<iomanip.h>voldprint(intw){inti;if(w!=0){print(w-1);for(i=1;j<=w:i++)cout<<setw(3)<<w:cout<<endl;}}voidmain(){print(4);}20.#include<iostream.h>#defineSW(x,y){x^=y;y^=x;x^=y;}voidmain(){inta=10,b=01;Sw(a,b);cout<<a<<','<<b;}四.完成下列程序1.靜

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論