在沒有構造函數時編譯器會自動創(chuàng)建一個缺省構造函數,但如量有了構造函數就不會自動創(chuàng)建一個缺省構造函數了。語句ttt ttt4(5)調用4次構造函數(有參數)創(chuàng)建4個數組對象,但第5個數組則要調用無參數構造函數,所以程序的錯誤是結構ttt中沒有定義無參數構造函數,可以在ttt結構體內加上如下語句:
ttt(){}
正確語句的4種填法為:
B.x+B.y+B.z;
PB->x+pB->y+pB->z;
(&B)->x+(&B)->y+(&B)->z;
(*pB).x+(*pB).y+(*pB).z;
(1)char*na,char*nu或char na[],char nu[]
(2)pn[k].name,pn[j].name
(3)obj[i].getdata(na[i],nu[i])
(4)*pt=obj
分析: (1)空位于類成員函數getdata()的形參表中,根據其后的函數體內容和數據成員的類型,易知(1)處應填char*na,char*nu或char na[],char nu[]。(2)空位于進行排序的友元函數getsort(person pn[N]的比較語句中,根據函數的參數和意要求,可知此處是對對象數組pn[N]的name成員進行比較,故填pn[k].name,pn[j].name。在主函數中,注意到定義了對象數組obj[N],但沒有被賦值,因此 (3)處要填obj[i].getdata(na[i],nu[i]),實現對各對象元素的賦值。空(4)處應注意到下兩函數調用中的實參為pt,而pt又沒有被定義且應為指向類對象數組的指針,故此處填*pt=obj。
(1)x=p,x;y=p.y
(2)x= =p.get—x()&&y= =p.get—y()
(3)*this
分析: 這是一個含有比較運算符和賦值運算重載的程序。從程序可以看出,這兩種運算符的重載很容易實現,其中(1)處是point類的拷貝構造函數定義;(2)處是比較兩個點是否相等,故可知(2)處應填x= =p.get—x()&&y= =p.get—y(),表示x值和y值都相等時,返回1,否則返回0;(3)處是返回this指針的內容。
(1)virtual
(2)*ptr
(3)ptr=&d
分析: 這是一個含有虛函數的程序。首先要注意的是虛函數必須在基類中定義,因此(1)處應填virtual;其次在用指針對基類和派生類對象操作時,指針應定義為基類的指針,如果定義為派生類的指針,則該指針只能指向派生類的對象,而不能指向基類對象,因此(2)處應填*ptr,定義一個基類指針;(3)處填入ptr=&d,是讓指針指向派生類對象。
相關鏈接:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |