程式改錯題
使用VC++6.0開啟考生資料夾下的源程式檔案,該程式執行時有錯誤,請改正其中的錯誤,使程式正確執行,並且使程式輸出的結果為
0K
注意:錯誤的語句在//******error******的下面,修改該語句即可。
試題程式:
#include
classTC
{
public:
TC()
{
a=b=0:
}
private:
inta,b;
};
classTCl:publicTC
{
public:
TC1()
{
}
//******error******
virtualvoidfunc();
};
classTC2:publicTCl
{
public:
TC2()
{
a=0:
b=0:
}
voidfunc()
{
//******error******
cout<<"OK" }
private:
inta;
intb;
};
voidmain()
{
TC20bj;
//******error******
TCl*p=(TCl*)obj;
p->func();
}
(1)應改為“virtualvoidfunc()=0;”。
(2)應改為“cout<<"0K"<(endl;”。
(3)應改為“TCl*p=(TCl*)&obj;”。
【解析】本題中TCl類中的func函式是純虛擬函式,純虛擬函式的定義格式為virtual<函式型別><函式名>((引數表>)=0”,因此第1處的語句應為“virtualvoidfunc()=0;”。func函式沒有引數表。編譯程式後發現第2處的語句有錯誤,cout流中的資料是用流插入運算子“<<”順序加入的,因此“<”不正確,應改成“cout<<"0K"<
綜合應用題
使用VC++6.0開啟考生資料夾下的源程式檔案。其中定義的類不完整,按要求完成下列操作,將類的定義補充完整。
(1)完成TC的建構函式,請改正註釋1後的錯誤。
(2)完成func函式定義,請改正註釋2後的錯誤。
(3)初始化CmyClass的成員變數Num3為4,請改正註釋3後的錯誤。
(4)完成func函式,請改正註釋4後的錯誤。
輸出的結果為
Num1=12
Num2=18
Num3=16
Num1=4
Num2=2
Num3=19
注意:除在指定位置新增語句之外,不要改動程式中的其他內容。
試題程式:
#include
classTC
{
public:
//********1********
TC(inti,intj)
{
Numl=i;
Num3+=i:
}
voiddisplay()
{
cout<<"Num1="< cout<<"Num2="< cout<<"Num3="< }
voidAddNum(inti)
{
Num3+=i;
}
private:
intNum1;
constintNum2;
staticintNum3;
//********2********
};
//********3********
voidfunc()
{
TCobj(1,2);
1=4;
//********4********
um();
lay();
}
voidmain()
{
TCmyObj(12,18);
lay();
rune();
return;
}
(1)將“TC(inti,intj)”補充完整為“TC(inti,intj):Num2(j)”。
(2)應新增“friendvoidfunc();”。
(3)應新增“intTC::Num3=4;”。
(4)將“um()”補充完整為“um(2);”。
【解析】本題在第1處完成類的建構函式初始化類的成員變數,常資料成員也必須初始化,並且不能被更新,常資料成員的初始化只能通過建構函式的成員初始化類表進行,因此第1處的語句應為“TC(inti,intj):Num2(j)”,i用來初始化Num1和Num3,j初始化Num2。第2處完成fune的'函式定義,由審題分析可知,函式fune為類的友元,故第2處的語句應為“friendvoidrune();”。第3處的語句是靜態成員的初始化,靜態資料成員的初始化格式為“(資料型別)<類名>::<靜態資料成員)=<初始值>”,因此第3處的語句應為“intTC::Num3=4;”。成員函式AddNum帶有一個整型引數,因此呼叫此函式時必須有引數傳入,可由程式執行結果分析得知傳入的引數值的大小。在fun函式內,定義TCobj(1,2)後,1=1,2=2,Num3=16+1=17,1=4,Numl為4,obj。Num2為常資料成員,其值不會改變,呼叫AddNum函式後呼叫顯示函式顯示成員變數值,可知Num3為19,因此AddNum()的引數為19-17=2,即第4處的語句應為“um(2);”。