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