c++總復習(考題、考點全攻略)_第1頁
c++總復習(考題、考點全攻略)_第2頁
c++總復習(考題、考點全攻略)_第3頁
c++總復習(考題、考點全攻略)_第4頁
c++總復習(考題、考點全攻略)_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C要點復習

第一章C++的初步知識

本章復習重點是:

掌握C++的輸入輸出運算符>>和<<;

掌握new和delete的用法;

掌握〃和/*…….*/的用法;

函數(shù)原型;

缺省參數(shù)的用法

引用的概念及應用

要了解的內(nèi)容是:

內(nèi)置(聯(lián))函數(shù);(在函數(shù)說明前加inline,功能和C中帶參數(shù)的宏類似)

Const說明符;

說明符號常量constfloatPI=3.14;

說明函數(shù)的形參f(constintx)

指向常量的指針:通過該指針不能修改它指向的對象;如

inta=0;

constint*p;

p=&a;

*p=10〃錯誤、

常指針:把指針本身,而不是它指向的對象聲明為常量。用*const表示,通過該指針可以修改它指向的對

象的值,但它不可以指向其他的對象。如

inta=0,b=l;

int*constp=&a;

*p=10;

p=&b;//錯誤

指向常量的常指針:兩個目標都要說明為const,如

inta=0,b=l;

constint*constp=&a;

*p=10;〃錯誤,不能修改它指向的對象

p=&b;〃錯誤,不能指向其他對象。

3.枚舉名、結構體和公用體的簡單用法。

注意事項:

1.CONST修飾的是緊跟其后的聲明元;

2.可以將變量的指針賦給指向常量的指針,但常量的地址不能賦給無約束的指針(一般指針)。

3.所有取缺省值參數(shù)都必須出現(xiàn)在不取缺省值的參數(shù)的右邊。

4.不允許創(chuàng)建引用數(shù)組;類型void&是不允許的。若一個函數(shù)要求返回引用,則retum后面應該是一個

引用(形式可以是獨立引用、數(shù)組元素、static變量、指針所指向的對象、結構的分量、聯(lián)合的分量),它

實際上是返回的某個存儲單元。

5.要回收new分配的數(shù)組空間,不需要顯式指出數(shù)組大小,如deleteQpoint;表示刪除由point指向的

數(shù)組。

第二章類和對象

本章復習重點是掌握以下概念和問題:

1.數(shù)據(jù)封裝2。繼承3。多態(tài)性4。對象成員的引用(通過對象名和成員運算符、通過指向?qū)ο蟮?/p>

指針、通過對象的引用)5。類的三種形式:class類、struct類、union類。定義及實現(xiàn)方法。

第三章關于類和對象的進一步討論

本章要掌握的重點:

1.概念:構造函數(shù)、函數(shù)重載、類、友元類、友元函數(shù)。

2.類對象的初始化。

3.構造函數(shù)和析構函數(shù)功能及定義形式

4.This指針

5.靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的用法。

6.友元函數(shù)及友元類的用法。

7.對象數(shù)組、類常量、指向?qū)ο蟮闹羔槨?/p>

注意事項:

1.類成員有3類訪問權限:公有、私有和保護。說明為保護的成員除了可以被類本身的成員函數(shù)和說明

為友元類的成員函數(shù)訪問外,也可以被該類的派生類的成員訪問。

2.與構造函數(shù)對應的是析構函數(shù)。當一個對象消失或用NEW)創(chuàng)建的對象用DELETE刪除時,由系統(tǒng)自

動調(diào)用類的析構函數(shù)。

3.類的每一個成員函數(shù)都有一個隱含定義的常量指針。我們把它稱為THIS指針。這個指針只能在類的成

員函數(shù)中使用,它指向調(diào)用成員函數(shù)的對象。

4.靜態(tài)數(shù)據(jù)成員在定義時前面加關鍵字STATIC。靜態(tài)數(shù)據(jù)成員屬于類而不屬于對象,是類的所有對象共

享的成員。使用靜態(tài)數(shù)據(jù)成員可以節(jié)省內(nèi)存。他們的初始化一般放在類定義之外進行。方式為:TYPE類

名::靜態(tài)數(shù)據(jù)成員名=初始值

5.友元函數(shù)沒有this指針,這與static成員函數(shù)類似。

6.一個成員函數(shù)名后面跟一個CONST,表示它不能修改this所指的對象的成員。

第四章運算符重載

本章復習重點是:

運算符重載的語法形式operator?(參數(shù)表)如operator++()

哪些運算符可以被重載,哪些不能?

用成員函數(shù)和用友元函數(shù)重載運算符有什么不同?

怎樣重載<<和》運算符?

轉(zhuǎn)換構造函數(shù)、類型轉(zhuǎn)換函數(shù)。

注意事項:

重載運算符時,不能改變它們的優(yōu)先級,不能改變它們的結合性,也不能改變這些運算符所需操作數(shù)的數(shù)

目。

.::?:#*兒個運算符不能被重載。

成員函數(shù)僅僅能為一個實際對象所調(diào)用,友元無此限制。因此若運算符的操作需要修改類對象的狀態(tài),則

重載應該用成員函數(shù)而不是友元。需要左值操作數(shù)的運算符的重載用成員函數(shù),如果運算符所需的操作數(shù)

(尤其是第一個操作數(shù))希望有隱式類型轉(zhuǎn)換,則該運算符重載必須用友元。

不能用友元函數(shù)重載的運算符是=()[]->

轉(zhuǎn)換構造函數(shù)的作用是將一個其他類型的數(shù)據(jù)(可以是類類型也可以是非類類型)轉(zhuǎn)換成一個指定的類的

對象。它只有一個參數(shù)。如:Complex(doubler){real=r;imag=O;}

Teacher(Student&s){num=s.num;name=;sex=s.sex;}(s中的成員應是公用的)

類型轉(zhuǎn)換函數(shù)的作用是將一個類的對象轉(zhuǎn)換成另一個基本類型的數(shù)據(jù)。一般形式是

OPERATOR類型名(){實現(xiàn)轉(zhuǎn)換的語句}〃不能指定函數(shù)類型,也無參數(shù)。

如:operatordouble(){returnreal;}

6.類型轉(zhuǎn)換函數(shù)可以定義為一個類的成員函數(shù),但不能定義為友元。

第五章繼承與派生

本章復習重點:

派生類的定義及形式

派生類成員的訪問屬性

派生類構造函數(shù)的聲明方法

多重繼承派生類的構造函數(shù)

虛基類的概念及使用

注意事項:

私有成員段在類外不能被訪問(除非友元關系),私有成員段不能被繼承。

保護段成員在類外不能被訪問(除非友元關系),保護段成員能被繼承。

公有段成員在類外能被訪問,能被繼承。

如為公有派生基類所有公有段的成員仍是派生類公有段的成員,基類保護段的成員也是派生類保護段的成

員,而私有派生則表示,基類所有公有段的成員和保護段的成員都成為派生類私有段的成員。

如果派生類定義了與基類同名的成員,則派生類的成員就覆蓋了基類的成員,這時在派生類中使用基類中

的同名成員要在基類成員名前加上基類名::。)

6.C++提供虛基類,使得在繼承間接共同基類時只保留一份成員。

第六章多態(tài)性與虛函數(shù)

本章復習重點:

1.多態(tài)性的概念:向不同的對象發(fā)送同一個消息,不同對象在接收時會產(chǎn)生不同的行為。

2.虛函數(shù)的作用:在程序中,通過指針調(diào)用不同派生層次中的同名函數(shù)。調(diào)用形式相同。

3.純虛函數(shù)和抽象類:在聲明時被初始化為0的函數(shù)叫純虛函數(shù);只作為基本類型用作繼承的類叫抽象

類。

虛函數(shù)可以在一個或多個派生類中被重新定義,但要求在派生類中重新定義時,虛函數(shù)的函數(shù)原型,包括

返回類型、函數(shù)名、參數(shù)個數(shù)、參數(shù)類型的順序,必須完全相同。

第七章輸入輸出流

本章復習重點:

1.lostream類庫中常用流類。

2.常用流成員函數(shù)get、getline^eof>peek、putbacksignore<.

3.文件操作:打開、關閉、輸入輸出方式設置、ASCH文件操作、二進制文件操

典型例題

解釋程序功能并寫出運行結果

1.#include<iostream.h>

classs

intx,y;

public:

s(inta,intb){x=a;y=b;}

intgetx(){returnx;}

intgety(){returnx+y;}

);

voidmain()

int(s::*fp)();

fp=s::getx;

ssl(l,2);

intv=(sl.*fp)();

fp=s::gety;

intt=(sl.*fp)();

cout?,,v=,,?v?,,,t=n?t?endl;

)

(答案:v=2,t=7)

2.#include<iostream.h>

voidmain()

{

inta[]={10,20,30,40),*pa=a;

int*&pb=pa;pb++;

cout?*pa?endl;

)

(答案:20)

編程序例題

3.寫一個程序,輸入N個學生數(shù)據(jù),包括學號、姓名、成績,要求只輸出成績在60以下分數(shù)段的學生數(shù)

據(jù)。

(答案:

#include<stdio.h>

#include<string.h>

#defineN3

classstud

{

intno;

charname[10];

intdeg;

public:

voidsetdata(intn,charna[],intd)

(

no=n;deg=d;

strcpy(name,na);

)

voiddisp()

{

if(deg<60)

printf(M%-5d%-8s%3d\n',,no,name,deg);

});

voidmain()

(

studst[N];

inti,n,d;

charnaf10];

for(i=0;i<N;i++){

printf("輸入學號姓名成績:]

scanf(”%d%s%d;&n,&na,&d);

st[i].setdata(n,na,d);

)

printf("輸出數(shù)據(jù)\n");

printf("學號姓名成績\n");

for(i=0;i<N;i++)

st[i].disp();

)

4.有一個向量類Vector,包括一個點的坐標位置x和y,設計兩個友元函數(shù),實現(xiàn)兩個向量的加法和減法

運算。在主函數(shù)中實現(xiàn)向量(10,20)和(30,40)的加減運算。

(答案:

#include<iostream.h>

classVector

(

intx,y;

public:

Vector(){}

Vector(inti,intj){x=i;y=j;}

voiddisp()

(

8utvv”("vvxvv〈”vvy?〈”;

)

friendVectoradd(Vectorv1,Vectorv2)

(

Vectorv;

v.x=vl.x+v2.x;

v.y=vl.y+v2.y;

returnv;

)

friendVectorsub(Vectorvl,Vectorv2)

(

Vectorv;

v.x=vl,x-v2.x;

v.y=vl.y-v2.y;

returnv;

});

voidmain()

(

Vectorvl(l0,20),v2(30,40),v3;

v3=add(vl,v2);

coutvv”輸出結果:"vvendl;coutvv"*';v1.disp();cout?n+";v2.disp();

cout?"=";v3.disp();cout?endl;

v3=sub(vl,v2);

cout?Hn;v1.disp();cout?,,-n;v2.disp();

cout?"=',;v3.disp();cout?endl;

)

5.對+、-、X、/、++、--、>>、vv的重載。

6.對文件的操作。

復習題

1.下列語句中錯誤的是(D)

A.int*p=newint(10);B.int*p=newint[10];C.int*p=newint;D.int*p=newint[40](0)

2.假設已經(jīng)有定義char*constname="chen";下面的語句中正確的是(A)

A.name[3]=B.name=MlinM;C.name=newchar[5]D.name=newchar(<q,);

3.卜.面的類型聲明中正確的是(D)

A.int&a[4]B.int&*p;C.int&&q;D.intI,*p=&I;

4.在聲明類時,下面的說法正確的是(C)

A.可以在類的聲明中給數(shù)據(jù)成員賦值B.數(shù)據(jù)成員的數(shù)據(jù)類型可以是register

C.private、public、protected可以按任意順序出現(xiàn)D.沒有用private、public>protected定義的數(shù)據(jù)成員是公有

成員

5.構造函數(shù)是在(B)時被執(zhí)行的。

A.程序編譯B.創(chuàng)建對象C.創(chuàng)建類D.程序裝入內(nèi)存

6.在下面有關友元函數(shù)的描述中,正確的說法是(A)

A.友元函數(shù)是獨立于當前類的外部函數(shù)B.一個友元函數(shù)不能同時定義為兩個類的有友元函數(shù)

C.友元函數(shù)必須在類的外部定義D.在外部定義友元函數(shù)時,必須加關鍵字friend

7.使用派生類的主要作用是(A)

A.提高代碼的可重用性B.提高程序的運行效率C.加強類的封裝性D.實現(xiàn)數(shù)據(jù)的隱藏

8.關于虛函數(shù),正確的描述是(A)

A.構造函數(shù)不能是虛函數(shù)B.析構函數(shù)不能是虛函數(shù)C.虛函數(shù)可以是友元函數(shù)D.虛函數(shù)可以是靜態(tài)成員函數(shù)

9.如果在基類中將成員函數(shù)show聲明為不帶返回值得純虛函數(shù),正確的寫法是(C)

A.virtualshow()=0;B.virtualvoidshow()C.virtualvoidshow()=0;D.voidshow()=0virtual;

10.使用myFile.open("sales.dat",ios::app)語句打開文件sales.dat后,則(A)

A.該文件只能用于輸出B.該文件只能用于輸入C.該文件既能用于輸出,又能用于輸入D.若該文件存在,則清除該文件

的內(nèi)容

二、分析下列程序中的錯誤,并說明原因(前2題每題6分,第三題8分,共20分)

1.#include"iostream.hH

classstudent

{

charname[10];

intage;

floataver;2.#include"iostream.h

voidprintStu(){}classstack

};(

voidmain()public:

(stack(intsz);

studentp1,p2,p3;private:

p1.age=16;char*p;

II...intsize;

)};

stack::stack(intsz))

{voidmain()

p=newchar[size=sz];{

}CTestc(2,8);

voidmain()inti=c.y2;

{i=c.y1;

stackstt;)

//...三、寫出下列程序的運行結果(前2題每題6分,第三題

}8分,共20分)

3.#include"iostream.hH1.#include"iostream.hn

classCTestclasstoy

((

public:public:

constinty2;toy(intq,intp)

CTest(inti1,inti2):y1(i1),y2(i2){quan=q;price=p;}

{intget_quan()

y1=10;{returnquan;}

x=y1;intget_price()

}{returnprice;}

intreadme()const;private:

〃…intquan,price;

private:};

intx;intmain()

constinty1;{

};toy

intCTest::readme()constop[2][2]={toy(10,20),toy(30,48),toy(50,68),toy(

{70,80));

inti;inti;

i=x;for(i=0;i<2;i++)

x++;(

returnx;cout<<op[i][O].get_quan()<<",";

cout<<op[i][0].get_price()<<M\n";Der1_Stockd1;

cout<<op[i][1].get_quan()<<Der2_Stockd2;

cout<<op[i][1].get_price()<<n\n";ptr=&s1;

)ptr->print();

cout<<"\n";ptr=&d1;

return0;ptr->print();

)ptr=&d2;

ptr->print();

2.#include"iostream.h"}

classStock3.#include"iostream.h"

(classA

public:(

voidprint()public:

{cout<<"Stockclass.\n";}A(inti):xi(i){}

);A(){xi=0;}

classDer1_Stock:publicStockfriendAoperator++(Aa);

(friendAoperator--(A&a);

public:voidprint();

voidprint()private:

{cout<<"Deri1_Stockclass.\n";}intxi;

););

classDer2_Stock:publicStockAoperator++(Aa)

{(

public:++a.xi;

voidprint()returna;

{cout<<"Deri2_Stockclass.\n";})

};Aoperator--(A&a)

voidmain(){

{--a.xi;

Stocks1;returna;

Stock*ptr;)

voidA::print()3.答案:錯誤1:y1=10;有錯(2分),y1是常成員,

{cout<<xi<<endl;}不能修改(1分)

voidmain()錯誤2:x++;有錯(2分),readme函數(shù)是常成員函數(shù),

{不能修改對象的數(shù)據(jù)成員(1分)

Ai(7);錯誤3:i=c.y1;有錯(1分),y1是私有變量,不能直接

++i;存?。?分)

i-print();三1.答案:10.20;30,48;50,6870,80

--i;2.答案:Stockclass.

i.print();Stockclass.

)Stockclass.

—1.答案:p1.age=16;有錯(3分),因為age是3.答案:7

私有數(shù)據(jù)成員,不能直接訪問(3分)6

2.答案:stackstt;有錯,(3分)類中沒有定義無參構

造函數(shù)(3分)

B卷

?、選擇題(每題2分,共20分,答案填寫在題后的表格內(nèi))

1.假設已經(jīng)有定義constchar*constname="chen";卜面的語句中正確的是(D)

A.name[3]='a';B.name="lin";C.name=newchar[5]D.cout<<name[3];

2.假設已經(jīng)有定義constchar*name="chen";下面的語句中錯誤的是(A)

A.name[3]='q';B.name="lin";C.name=newchar[5]D.name=newchar('q');

3.在下面有關對構造函數(shù)的描述中,正確的是(B)

A.構造函數(shù)可以帶有返回值B.構造函數(shù)的名字與類名完全相同C.構造函數(shù)必須帶有參數(shù)D.構造函數(shù)必須定義,

不能缺省

4.在下面有關析構函數(shù)特征的描述中,正確的是(C)

A.一個類可以定義多個析構函數(shù)B.析構函數(shù)名與類名完全相同C.析構函數(shù)不能指定返回類型D.析構函數(shù)可以有一個

或多個參數(shù)

5.在下面有關靜態(tài)成員函數(shù)的描述中,正確的是(B)

A.在靜態(tài)成員函數(shù)中可以使用this指針B.在建立對象前,就可以為靜態(tài)數(shù)據(jù)成員賦值

C.靜態(tài)成員函數(shù)在類外定義時;要用static前綴D.靜態(tài)成員函數(shù)只能在類外定義

6.友元的作用之一是(A)

A.提高程序的運行效率B.加強類的封裝性C.實現(xiàn)數(shù)據(jù)的隱藏性D.增加成員函數(shù)的種類

7.假設已經(jīng)定義好了?個類student,現(xiàn)在要定義類derived,它是從student私有派生的,定義類derived的正確寫

法是(C)

A.classderived::studentprivateB.classderived:studentpublic

C.classderived:privatestudent{H...}D.classderived::publicstudent{II...]

8.要實現(xiàn)動態(tài)聯(lián)編,派生類中的虛函數(shù)(D)

A.返回的類型可以與虛函數(shù)的原型不同B.參數(shù)個數(shù)可以與虛函數(shù)的原型不同C.參數(shù)類型可以與虛函數(shù)的原型不同D.以

上都不對

9.有關運算符重載正確的描述是(D)

A.C++語言允許在重載運算符時改變運算符的操作個數(shù)B.C++語言允許在重載運算符時改變運算符的優(yōu)先級

C.C++語言允許在重載運算符時改變運算符的結合性D.C++語言允許在重載運算符時改變運算符的原來的功能

10.假設定義了函數(shù)模板:

template<classT>

Tmax(Tx,Ty)

{return(x>y)?x:y;}

并定義了inti=6;charc=,a,;錯誤的調(diào)用語句是(D)

A.max(i,i)B.max(c,c)C.max((int)c,i)D.max(i,c)

二、分析卜.列程序中的錯誤,并說明原因(前2題每題6分,第三題8分,共20分)

1.#include"iostream.h"

classpoint

{public:

intx,y;

private:

point(){x=1;y=2;}};

voidmain()

{pointcpoint;

cpoint.x=2;}

2.#include"iostream.hn

template<classT>

classStack

{public:

Stack(intsz)

{v=p=newT[size=sz];}

~Stack()

{delete[]v;}

voidpush(Tx)

{*p++=x;}

Tpop()

{return*--p;}

intlenth()const

{return(p-v);}

private:

T*v,*p;

intsize;};

voidmain()

{Stackobj(5);

obj.push(10);}

3.#include"iostream.h"

classstudent

{intsno;

intage;

voidprintStu();

voidsetSno(intd);};

voidprintStu()

{cout<<M\nStudentNo.is“vvsnovv”,";cout<<MageisH<<age<<H,M<<endl;}

voidsetSno(intd)

{sno=d;}

voidsetAge(inta)

{age=a;}

voidmain()

{studentlin;

lin.setSno(20021);

lin.setAge(20);

lin.printStu();}

三、寫出下列程序的運行結果(前2題每題6分,第三題8分,共20分)

1.#include"iostream.hH

classb1

{public:

b1(intii)

{i=ii;}

voiddisplay()

{cout<<i<<endl;}

protected:

inti;};

classb2

{public:

b2(intjj)

{j=jj;}

voiddisplay()

{cout<<j<<endl;}

protected:

intj;};

classb3:publicb1,publicb2

{public:

b3(intiijntjjjntkk):b1(ii),b2(jj)

{k=kk;}

voidsetall(intiijntjjjntkk)

{i=ii;j=jj;k=kk;}

voiddisplay()

{cout<<i<<endl;

cout<<j<<endl;

cout<<k<<endl;}

private:

intk;};

voidmain()

{b101(40);

o1.display();

b202(50);

o2.display();

b303(10,20,30);

o3.display();

o3.setall(50,60,70);

o3.display();}

2.#include"iostream.hH

classStock

{public:

virtualvoidprint()

{cout<<"Stockclass.\n";}};

classDer1_Stock:publicStock

{public:

voidprint()

{cout<<"Deri1_Stockclass.\n";}};

classDer2_Stock:publicStock

{public:

voidprint()

{cout<<"Deri2_StockclassAn";}};

voidmain()

{Stocks1;

Stock*ptr;

Der1_Stockd1;

Der2_Stockd2;

ptr=&s1;

ptr->print();

ptr=&d1;

ptr->print();

ptr=&d2;

ptr->print();}

3.#include<iostream.h>

constintsize=10;

template<classType>〃聲明?個類模板

classstack

{public:

voidinit(){tos=0;}

voidpush(Typech);//參數(shù)取Type類型

Typepop();〃返回類型取Type類型

private:

Typestck[size];〃數(shù)組的類型為類型參數(shù)Type,即可取任意類型

inttos;};

template<classType>

voidstack<Type>::push(Typeob)

{if(tos==size){coutvv"stackisfull";return;}

stck[tos]=ob;tos++;}

template<classType>

Typestack<Type>::pop()

{if(tos==0)

{cout<<"stackisempty”;

return0;}

tos--;

returnstck[tos];}

intmain()

{〃定義字符堆棧

stack<char>s1,s2;〃創(chuàng)建兩個模板參數(shù)為char型的對象

inti;

s1.init();s2.init();

s1.push('a');s2.push('x,);

s1.push('b');s2.push('y*);

s1.push('c');s2.push(*z');

for(i=0;i<3;i++)cout<<"pops1:H<<s1.pop()<<endl;

for(i=0;i<3;i++)cout<<"pops2:H<<s2.pop()<<endl;

return0;}

二、分析卜.列程序中的錯誤,并說明原因(前2題每題6分,第三題8分,共20分)

1.答案:pointcpoint;是錯誤的(3分),因為構造函數(shù)是私有成員(3分)

2.答案:Stackobj(5);有錯(3分),因為Stack是類模板,應將模板實例化,才可定義對象(3分)

3.答案:錯誤1:printStu、setSno兩個成員函數(shù)不是公有成員,不允許在類外訪問(4分)

錯誤2:成員函數(shù)在類外定義,應加上類名“student::"(2分)

錯誤3:setAge函數(shù)應在類中說明(2分)

三、寫出下列程序的運行結果(前2題每題6分,第三題8分,共20分)

1.答案:4050102030506070

2.答案:Stockclass.

Deri1_Stockclass.

Deri2_Stockclass.

3.答案:pops1:c

pops1:b

pops1:a

pops2:z

pops2:y

pops2:x

A卷

?、單項選擇題:(每小題2分,共20分)

1、假設已經(jīng)有定義constchar*name="chen”;卜.列語句中錯誤的是

A.name[3]=,q,B.name=,,linnC.name=newchar[5]D.name=newchar(*q,)

2、在下列關鍵字中,用于說明類中公有成員的是

A.publicB.privateC.protectedD.friend

3、下列哪項不是面向?qū)ο蟪绦蛟O計的主要特征。

A.封裝B.繼承D.多態(tài)D.結構

4、構造函數(shù)是在時被執(zhí)行的。

A.程序編譯B.創(chuàng)建對象C.創(chuàng)建類D.程序裝入內(nèi)存

5,在下面有關析構函數(shù)的描述中,正確的是

A.一個類中可以定義多個析構函數(shù)

B.析構函數(shù)的名字和類名完全相同

C.析構函數(shù)不能指定返回類型

D.析構函數(shù)可以有一個或多個參數(shù)

6、使用派生類的主要原因是

A.提高代碼的可充用性B.提高程序的運行效率C.加強類的封裝性D.實現(xiàn)數(shù)據(jù)的隱藏

7、下列的各函數(shù)中,不是類的成員函數(shù).

A.構造函數(shù)B.析構函數(shù)C.友元函數(shù)D.拷貝構造函數(shù)

8、關于虛函數(shù),正確的描述是

A.構造函數(shù)不能是虛函數(shù)B.析構函數(shù)不能是虛函數(shù)

C.虛函數(shù)可以是友元函數(shù)D.虛函數(shù)可以是靜態(tài)成員函數(shù)

9、友元的作用之一是

A.提高程序的運用效率B.加強類的封裝性

C.實現(xiàn)數(shù)據(jù)的隱藏性D.增加成員函數(shù)的種類

10、在下面有關靜態(tài)成員函數(shù)的描述中,正確的是

A.在靜態(tài)成員函數(shù)中可以使用this指針

B.在建立對象前,就可以為靜態(tài)數(shù)據(jù)成員賦值

C.靜態(tài)成員函數(shù)在類外定義時,要用static前綴

D.靜態(tài)成員函數(shù)只能在類外定義

得分

評卷人

二、判斷題:(每題1分,共10分)

()1、使用關鍵字class定義的類中缺省的訪問權限是私有(private)的。

()2、構造函數(shù)和析構函數(shù)都不能重載。

()3、說明或定義對象時,類名前不需加關鍵字class。

()4、可以在類的構造函數(shù)中對靜態(tài)數(shù)據(jù)成員進行初始化。

()5、protected和private區(qū)別在于protected成員可以被派生類訪問,而private成員則不能被派生類訪問。

()6、在C++中,封裝是通過類實現(xiàn)的。

()7、無論何時編譯器都為類構造一個無參數(shù)的缺省的構造函數(shù)。

()8、無論什么方式的繼承,基類的私有成員都不能被派生類訪問。

()9、在C++中,只有在類對象定義之后才能給數(shù)據(jù)成員賦初值。

()10、創(chuàng)建派生類對象時,先調(diào)用基類的構造函數(shù),再調(diào)用派生類的構造函數(shù)。

得分

評卷人

三、填空題:(每空1分,共10分)

1、在C++中,類的成員訪問權限分別是:公有成員,私有成員和o

2、拷貝構造函數(shù)使用作為參數(shù)初始化創(chuàng)建中的對象。

3、在C++中,雖然友元提供了類之間數(shù)據(jù)進行訪問的?種方式,但它破壞了面向?qū)ο蟪绦蛟O計的特

性。

4、在公有繼承的情況下,基類數(shù)據(jù)成員在派生類中的訪問權限o

5、在面向?qū)ο蟮某绦蛟O計中,通過實現(xiàn)數(shù)據(jù)隱藏;通過實現(xiàn)代碼的復用。

6、在C++中,構造派生類對象時?,總是先從的初始化開始的。

7、在基類和派生類中,派生類可以定義其基類中不具備的數(shù)據(jù)和操作。對兩個有相同名字的數(shù)據(jù)成員進行訪問時,如果沒

有,對此數(shù)據(jù)成員的訪問將出現(xiàn)歧義:而、和operator是不能被派生類繼

承的。

得分

評卷人

四、寫出程序運行結果(每題5分,共30分)

1、#include<iostream.h>2、#include<iostream.h>

int&f(int&i)inti=15;

{i+=10;returni;}voidmain()

voidmain(){inti;

{intk=0;i=100;

int&m=f(k);::i=i+1;

cout<<k<<endl;cout<<::i<<endl;

m=20;}

cout<<k<<endl;4、#include<iostream.h>

)#include<stdlib.h>

3、#include<iostream.h>classtimer{

classdate{public:timer(){seconds=0;}

public:voidsetdate(inty,intm,intd);timer(char*t){seconds=atoi(t);}

voidshowdate();timer(intt){seconds=t;}

private:intyear,month,day;};timer(intmin,int

sec){seconds=min*60+sec;}

voiddate::setdate((inty,intm,intd)intgettime(){returnseconds;}

{year=y;month=d;day=d;}private:seconds;};

voiddate::showdate()voidmain()

{cout<<yearvv”."v<month<<M.H<<day<<endl;}{timera,b(10),c(H20M),d(1,10);

voidmain()cout<<nseconds1="<<a.gettime()<<endl;

{datedatel,date2;cout<<nseconds2=M<<b.gettime()<<endl;

datel.setdate(2000,4,28);cout<<nseconds3=M<<c.gettime()<<endl;

datel.showdate();cout<<,,seconds4=,,<<d.gettime()<<endl;}

date2.setdate(2006,10,25);6、#include<iostream.h>

date2.showdate();}classbase{

5、#include<iostream.h>public:base(intsa){a=sa;

classbasecout<<"constructingbase"<<endl;}

{intn;private:inta;};

public:base(inta)classbasel:virtualpublicbase{

{cout<<"constructingbaseclass"<<endl;public:basel(intsa,intsb):base(sa)

n=a;{b=sb;

cout<<"n="<<n<<endl;}cout<<"constructingbaselM<<endl;}

base(){cout<<ndestructingbaseclass"<<endl;}};private:intb;};

classsubs:publicbaseclassbase2:virtualpublicbase{

{basebobj;public:base2(intsa,intsc)::base(sa)

intm;{c=sc;

public:subs(inta,intbjntc):base(a),bobj(c)cout<<nconstructingbase2n<<endl;}

{private:intc;};

cout<<"constructingsubcass"vvendl;classderived:publicbasel,publicbase2{

m=b;public:derived(intsa,intsb,intsc,intsd):

cout<<,'m=,'<<m<<endl;base(sa),base1(sa,sb),base2(sa,sc)

{d=sd;

~subs(){cout<<"destructingsubclass"<<endl;}cout<<Hconstructing

derivedn<<endl;}

);private:intd;};

voidmain(){subss(1,2,3);}main(){derivedobj(2,4,6,8);return0;}

?、單項選擇題:(每小題2分,共20分)

AADBCACAAB

二、判斷題:(每題1分,共10分)

對錯對錯對對錯對對對

三、填空題:(每空1分,共10分)

1、受保護成員

2、同類對象的引用

3、封裝

4、公有的

5、封裝,繼承

6、基類

7、作用域分隔符限定,構造函數(shù),析構函數(shù)

四、寫出程序運行結果(每題5分,共30分)

1、10constructingbaseclass

20n=3

2、101constructingsubclass

3、2000.4.28m=2

2006.10.25destructingsubclass

4、secondsl=0destructingbaseclass

secondsl=10destructingbaseclass

secondsl=206、constructingbase

secondsl=70constructingbasel

5、constructingbaseclassconstructingbase2

n=1constructingderived

2009-2010學年第?學期期末考試

C++

1.下類引用定義中,正確的是(D)

A.intx,int&y=x:B.intx;int&y=x,x;

C.floatx;inty=&z;D.intx;int&y=x;

2.假設已經(jīng)有定義constchar*constname="chen";下面的語句中正確的是(D)

A.name[3]='a';B.name="lin";C.name=newchar[5]D.cout<<name[3];

3系統(tǒng)在調(diào)用重載函數(shù)時往往根據(jù)一些條件確定那個重載函數(shù)被調(diào)用,在下列選項中,不能作為依據(jù)的是

(D)

A.參數(shù)個數(shù)B,參數(shù)的類型C.函數(shù)名D.函數(shù)類型(返回值類型)

4、構造函數(shù)是在(B)時被執(zhí)行的。

A.程序編譯B.創(chuàng)建對象C.創(chuàng)建類D.程序裝入內(nèi)存

5、在下面有關析構函數(shù)的描述中,正確的是(C)

A.一個類中可以定義多個析構函數(shù)

B.析構函數(shù)的名字和類名完全相同

C.析構函數(shù)不能指定返回類型

D.析構函數(shù)可以有一?個或多個參數(shù)

6.有以下類的說明,錯誤的地方是()

classCoord

(D{intx=0;y=0;

?Coord();

?public:

@Coord(intx,inty);

?~Coord();

⑥);

A.(DB.②C.④D.@

7.this指針是一個隱含于每一個類的成員函數(shù)的特殊指針,它是用來指向正在操作成員函數(shù)的。的指針。

A.對象B.函數(shù)C.成員D.類型

8.有關類和對象的說法不正確的是(C)

A.對象是類的一個實例B.任何一個對象只能屬于一個具體的類

C.一個類只能有一個對象D.類與對象的關系和數(shù)據(jù)類型和變量的關系相似

9.在下面有關友元函數(shù)的描述中,正確的說法是(A)

A.友元函數(shù)是獨立于當前類的外部函數(shù)B.?個友元函數(shù)不能同時定義為兩個類的有友元函數(shù)

C.友元函數(shù)必須在類的外部定義D.在外部定義友元函數(shù)時,必須加關鍵字friend

10.派生類新增的成員函數(shù),不能直接訪問基類的(C)成員。

A.公有B.保護C.私有D.所有

11.下述靜態(tài)數(shù)據(jù)成員的特性中,(D)是錯誤的。

A說明靜態(tài)數(shù)據(jù)成員時前面要加修飾符static

B靜態(tài)數(shù)據(jù)成員要在類體外進行初始化

C引用靜態(tài)數(shù)據(jù)成員時,要在靜態(tài)數(shù)據(jù)成員名前加〈類名〉和作用域運算符

D類的靜態(tài)成員不實所有對象所共用的

《C++》復習資料及答案

一、判斷題

1、在變量定義intsum,SUM;中sum和SUM是兩個相同的變量名。()

2、字符串"china”在內(nèi)存中占據(jù)的存儲空間是5個字節(jié)。()

3、在C++語言中,"A”和,A,是等價的。()

4、C++表達式4/7和4.0/7的值是相等的,且都為double型。()

5、關系表達式a=b>c等價于a=(b>c),同時

溫馨提示

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

評論

0/150

提交評論