一、改錯(cuò)題
使用VC6打開(kāi)考生文件夾下的工程kt14_1,此工程包含一個(gè)源程序文件kt14_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使該程序的輸出結(jié)果為:
A:noparameters
B:intparameter
A:noparameters
B:intparameter
C:intparameter
源程序文件kt14_1.cpp清單如下:
#include
classA
{ /*****************found*****************/
private:
A(){cout<<"A:noparameters\n";}
A(inta){cout<<"A:intparameter\n";} };
classB:publicA
{ public:
B(inta){cout<<"B:intparameter\n";} };
/*****************found*****************/
classC:publicB,publicA
{ public:
/*****************found*****************/
C(inta)::B(a){cout<<"C:intparameter\n";} };
voidmain()
{ Bb(1);
Cc(2); }
【參考答案】
(1)將private:改為:public:
(2)將class C:public B,public A改為:class C:public B
(3)將C(int a)::B(a){cout<<"C: int parameter\n"; }
改為:C(int a):B(a){cout<<"C: int parameter\n";}
【試題解析】
(1)一個(gè)類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)可以由系統(tǒng)自動(dòng)生成,也可以由用戶(hù)提供,但構(gòu)造函數(shù)和析構(gòu)函數(shù)都必須是該類(lèi)的公有成員函數(shù),否則編譯時(shí)將出現(xiàn)錯(cuò)誤,不能被調(diào)用;
(2)A已經(jīng)是B的基類(lèi),C公有繼承B,A也就成為了C的基類(lèi),根據(jù)程序的運(yùn)行結(jié)果可知,C是要公有繼承B;
(3)派生類(lèi)的構(gòu)造函數(shù),初始化基類(lèi)的參數(shù),調(diào)用基類(lèi)的構(gòu)造函數(shù)時(shí),使用符號(hào)“:”,而不是“::”;
二、簡(jiǎn)單應(yīng)用題
編寫(xiě)函數(shù)fun(),它的功能是求n以?xún)?nèi)(不包括n)同時(shí)能被3與7整除的所有自然數(shù)之和的平方根s,并做為函數(shù)值返回。
例如:n為1000時(shí),函數(shù)值應(yīng)為s=153.909064。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
試題程序:
#include
#include
#include
doublefun(intn)
{ main()
{ clrscr();
printf("s=%f\n",fun(1000)); }
【參考答案】
double fun(int n)
{ double s=0.0;
int i;
for(i=0; i
/*從0~n中找到既能被3整除同時(shí)又能被7整除的數(shù),并將這些數(shù)求和*/
if(i%3==0&&i%7==0)
s=s+i;
s=sqrt(s); /*對(duì)s求平方根*/
return s; }
【試題解析】
本題的解題思路是:逐個(gè)取得從0~n之間的所有數(shù),對(duì)每次取得的數(shù)進(jìn)行條件判斷,條件是既能被3整除同時(shí)又能被7整除,注意:這兩個(gè)條件要求同時(shí)成立,因此用到了“&&”運(yùn)算符。滿(mǎn)足條件,該數(shù)就被累加到s中去,所有符合條件的數(shù)找完后,用sqrt()函數(shù)對(duì)s求平方根。
三、綜合應(yīng)用題
使用VC6打開(kāi)考生文件夾下的工程kt14_3。此工程包含一個(gè)kt14_3.cpp,其中定義了二維坐標(biāo)類(lèi)Coordinate和三維坐標(biāo)類(lèi)ThreeDCoord,其中ThreeDCoord類(lèi)由Coordinate類(lèi)public派生,但
兩個(gè)類(lèi)的定義并不完整。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。
(1)定義類(lèi)Coordinate的保護(hù)數(shù)據(jù)成員x和y,它們都是int型的數(shù)據(jù),代表二維坐標(biāo)的橫縱坐標(biāo)值。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(2)根據(jù)類(lèi)Coordinate定義后的成員函數(shù)Display的實(shí)現(xiàn),補(bǔ)充該函數(shù)在類(lèi)Coordinate定義體內(nèi)的聲明,Display為二維坐標(biāo)類(lèi)的虛函數(shù)。請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(3)完成二維坐標(biāo)類(lèi)Coordinate的構(gòu)造函數(shù),將參數(shù)a和b分別賦值給數(shù)據(jù)成員x和y。請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(4)根據(jù)ThreeDCoord類(lèi)構(gòu)造函數(shù)的聲明,補(bǔ)充ThreeDCoord構(gòu)造函數(shù)的實(shí)現(xiàn),參數(shù)a和b通過(guò)調(diào)用基類(lèi)的構(gòu)造函數(shù)來(lái)初始化基類(lèi)的數(shù)據(jù)成員x和y,c賦值給數(shù)據(jù)成員z。請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
輸出結(jié)果如下:
[1,2]
[3,4,5]
注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
源程序文件kt14_3.cpp清單如下:
#include
classCoordinate
{ protected:
//**1**
public:
Coordinate(inta=0,intb=0);
//**2** };
Coordinate::Coordinate(inta,intb)
{ //**3** }
voidCoordinate::Display()const
{ cout<<'['<
classThreeDCoord:publicCoordinate
{ intz;
public:
ThreeDCoord(inta=0,intb=0,intc=0);
virtualvoidDisplay()const; };
//**4**
voidThreeDCoord::Display()const
{ cout<<'['<
voidmain()
{ Coordinatec(1,2);
ThreeDCoordt(3,4,5);
c.Display();
t.Display(); }
【參考答案】
(1)protected:
int x;
int y;
(2)virtual void Display() const;
(3)x=a; y=b;
(4)ThreeDCoord::ThreeDCoord(int a, int b, int c) : Coordinate(a, b)
【試題解析】
本題主要考查對(duì)類(lèi)數(shù)據(jù)成員的定義、構(gòu)造函數(shù)、派生類(lèi)及虛函數(shù)的理解,是C++類(lèi)知識(shí)的一個(gè)綜合考核。對(duì)虛函數(shù)的定義格式及繼承類(lèi)構(gòu)造函數(shù)的定義格式請(qǐng)多加注意。
使用VC6打開(kāi)考生文件夾下的工程kt14_1,此工程包含一個(gè)源程序文件kt14_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使該程序的輸出結(jié)果為:
A:noparameters
B:intparameter
A:noparameters
B:intparameter
C:intparameter
源程序文件kt14_1.cpp清單如下:
#include
classA
{ /*****************found*****************/
private:
A(){cout<<"A:noparameters\n";}
A(inta){cout<<"A:intparameter\n";} };
classB:publicA
{ public:
B(inta){cout<<"B:intparameter\n";} };
/*****************found*****************/
classC:publicB,publicA
{ public:
/*****************found*****************/
C(inta)::B(a){cout<<"C:intparameter\n";} };
voidmain()
{ Bb(1);
Cc(2); }
【參考答案】
(1)將private:改為:public:
(2)將class C:public B,public A改為:class C:public B
(3)將C(int a)::B(a){cout<<"C: int parameter\n"; }
改為:C(int a):B(a){cout<<"C: int parameter\n";}
【試題解析】
(1)一個(gè)類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù)可以由系統(tǒng)自動(dòng)生成,也可以由用戶(hù)提供,但構(gòu)造函數(shù)和析構(gòu)函數(shù)都必須是該類(lèi)的公有成員函數(shù),否則編譯時(shí)將出現(xiàn)錯(cuò)誤,不能被調(diào)用;
(2)A已經(jīng)是B的基類(lèi),C公有繼承B,A也就成為了C的基類(lèi),根據(jù)程序的運(yùn)行結(jié)果可知,C是要公有繼承B;
(3)派生類(lèi)的構(gòu)造函數(shù),初始化基類(lèi)的參數(shù),調(diào)用基類(lèi)的構(gòu)造函數(shù)時(shí),使用符號(hào)“:”,而不是“::”;
二、簡(jiǎn)單應(yīng)用題
編寫(xiě)函數(shù)fun(),它的功能是求n以?xún)?nèi)(不包括n)同時(shí)能被3與7整除的所有自然數(shù)之和的平方根s,并做為函數(shù)值返回。
例如:n為1000時(shí),函數(shù)值應(yīng)為s=153.909064。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。
試題程序:
#include
#include
#include
doublefun(intn)
{ main()
{ clrscr();
printf("s=%f\n",fun(1000)); }
【參考答案】
double fun(int n)
{ double s=0.0;
int i;
for(i=0; i
/*從0~n中找到既能被3整除同時(shí)又能被7整除的數(shù),并將這些數(shù)求和*/
if(i%3==0&&i%7==0)
s=s+i;
s=sqrt(s); /*對(duì)s求平方根*/
return s; }
【試題解析】
本題的解題思路是:逐個(gè)取得從0~n之間的所有數(shù),對(duì)每次取得的數(shù)進(jìn)行條件判斷,條件是既能被3整除同時(shí)又能被7整除,注意:這兩個(gè)條件要求同時(shí)成立,因此用到了“&&”運(yùn)算符。滿(mǎn)足條件,該數(shù)就被累加到s中去,所有符合條件的數(shù)找完后,用sqrt()函數(shù)對(duì)s求平方根。
三、綜合應(yīng)用題
使用VC6打開(kāi)考生文件夾下的工程kt14_3。此工程包含一個(gè)kt14_3.cpp,其中定義了二維坐標(biāo)類(lèi)Coordinate和三維坐標(biāo)類(lèi)ThreeDCoord,其中ThreeDCoord類(lèi)由Coordinate類(lèi)public派生,但
兩個(gè)類(lèi)的定義并不完整。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。
(1)定義類(lèi)Coordinate的保護(hù)數(shù)據(jù)成員x和y,它們都是int型的數(shù)據(jù),代表二維坐標(biāo)的橫縱坐標(biāo)值。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(2)根據(jù)類(lèi)Coordinate定義后的成員函數(shù)Display的實(shí)現(xiàn),補(bǔ)充該函數(shù)在類(lèi)Coordinate定義體內(nèi)的聲明,Display為二維坐標(biāo)類(lèi)的虛函數(shù)。請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(3)完成二維坐標(biāo)類(lèi)Coordinate的構(gòu)造函數(shù),將參數(shù)a和b分別賦值給數(shù)據(jù)成員x和y。請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(4)根據(jù)ThreeDCoord類(lèi)構(gòu)造函數(shù)的聲明,補(bǔ)充ThreeDCoord構(gòu)造函數(shù)的實(shí)現(xiàn),參數(shù)a和b通過(guò)調(diào)用基類(lèi)的構(gòu)造函數(shù)來(lái)初始化基類(lèi)的數(shù)據(jù)成員x和y,c賦值給數(shù)據(jù)成員z。請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
輸出結(jié)果如下:
[1,2]
[3,4,5]
注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
源程序文件kt14_3.cpp清單如下:
#include
classCoordinate
{ protected:
//**1**
public:
Coordinate(inta=0,intb=0);
//**2** };
Coordinate::Coordinate(inta,intb)
{ //**3** }
voidCoordinate::Display()const
{ cout<<'['<
classThreeDCoord:publicCoordinate
{ intz;
public:
ThreeDCoord(inta=0,intb=0,intc=0);
virtualvoidDisplay()const; };
//**4**
voidThreeDCoord::Display()const
{ cout<<'['<
voidmain()
{ Coordinatec(1,2);
ThreeDCoordt(3,4,5);
c.Display();
t.Display(); }
【參考答案】
(1)protected:
int x;
int y;
(2)virtual void Display() const;
(3)x=a; y=b;
(4)ThreeDCoord::ThreeDCoord(int a, int b, int c) : Coordinate(a, b)
【試題解析】
本題主要考查對(duì)類(lèi)數(shù)據(jù)成員的定義、構(gòu)造函數(shù)、派生類(lèi)及虛函數(shù)的理解,是C++類(lèi)知識(shí)的一個(gè)綜合考核。對(duì)虛函數(shù)的定義格式及繼承類(lèi)構(gòu)造函數(shù)的定義格式請(qǐng)多加注意。