版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《面向?qū)ο蟪绦蛟O(shè)計》離線作業(yè)答案第2章【2.3】測試下面注釋(它在C++格調(diào)單行注釋中套入了類似于C注釋)是否有效。//thisisastrange/*waytodoacomment*/答:有效【2.4】以下這個簡短C++程序不可能編譯經(jīng)過,為何?#include<iostream>usingnamespacestd;intmain(){inta,b,c;cout<<"Entertwonumbers:";cin>>a>>b;c=sum(a,b);cout<<"sumis:"<<c;return0;}sum(inta,intb){returna+b;}答:不能sum使用前必須申明【2.5】回答下列問題。(1)以下兩個函數(shù)原型是否等價:floatfun(inta,floatb,char*c);floatfun(int,float,char*);等價(2)以下兩個函數(shù)第一行是否等價:floatfun(inta,floatb,char*c);floatfun(int,float,char*);答:等價【2.6】以下語句中錯誤是(C)。A.int*p=newint(10);B.int*p=newint[10];C.int*p=newint;D.int*p=newint[40](0);【2.7】假設(shè)已經(jīng)有定義“constchar*constname="chen";”下面語句中正確是(D)。A.name[3]='a';B.name="lin";C.name=newchar[5];D.cout<<name[3];【2.8】假設(shè)已經(jīng)有定義“char*constname="chen";”下面語句中正確是(C)。A.name[3]='q';B.name="lin";C.name=newchar[5];D.name=newchar('q');【2.9】假設(shè)已經(jīng)有定義“constchar*name="chen";”下面語句中錯誤是(A)。A.name[3]='q';B.name="lin";C.name=newchar[5];D.name=newchar('q');【2.10】重載函數(shù)在調(diào)用時選擇依據(jù)中,(B)是錯誤。A.函數(shù)名字B.函數(shù)返回類型C.參數(shù)個數(shù)D.參數(shù)類型【2.11】在(A)情況下適宜采取內(nèi)聯(lián)函數(shù)。A.函數(shù)代碼小,頻繁調(diào)用B.函數(shù)代碼多,頻繁調(diào)用C.函數(shù)體含有遞歸語句D.函數(shù)體含有循環(huán)語句【2.12】以下描述中,(C)是錯誤。A.內(nèi)聯(lián)函數(shù)主要處理程序運(yùn)行效率問題B.內(nèi)聯(lián)函數(shù)定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前C.內(nèi)聯(lián)函數(shù)中能夠包含各種語句D.對內(nèi)聯(lián)函數(shù)不能夠進(jìn)行異常接口申明【2.13】在C++中,關(guān)于以下設(shè)置默認(rèn)參數(shù)值描述中,(B)是正確。A.不允許設(shè)置默認(rèn)參數(shù)值B.在指定了默認(rèn)值參數(shù)右邊,不能出現(xiàn)沒有指定默認(rèn)值參數(shù)C.只能在函數(shù)定義性申明中指定參數(shù)默認(rèn)值D.設(shè)置默認(rèn)參數(shù)值時,必須全部都設(shè)置【2.14】下面類型申明中正確是(D)。A.int&a[4];B.int&*p;C.int&&q;D.inti,*p=&i;【2.15】下面關(guān)于重載函數(shù)說法中正確是(B)。A.重載函數(shù)必須具備不一樣返回值類型B.重載函數(shù)形參個數(shù)必須不一樣C.重載函數(shù)必須有不一樣形參列表D.重載函數(shù)名能夠不一樣【2.16】關(guān)于new運(yùn)算符以下描述中,(C)是錯誤。A,它能夠用來動態(tài)創(chuàng)建對象和對象數(shù)組B.使用它創(chuàng)建對象或?qū)ο髷?shù)組能夠使用運(yùn)算符delete刪除C.使用它創(chuàng)建對象時要調(diào)用結(jié)構(gòu)函數(shù)D.使用它創(chuàng)建對象數(shù)組時必須指定初始值【2.17】關(guān)于delete運(yùn)算符以下描述中,(C)是錯誤。A.它必須用于new返回指針B.使用它刪除對象時要調(diào)用析構(gòu)函數(shù)C.對一個指針能夠使用數(shù)次該運(yùn)算符D.指針名前只有一對方括號符號,不論所刪除數(shù)組維數(shù)【2.18】寫出以下程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;inti=15;intmain(){inti;i=100;::i=i+1;cout<<::i<<endl;return0;}答:101【2.19】寫出以下程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;voidf(int&m,intn){inttemp;temp=m;m=n;n=temp;}intmain(){inta=5,b=10;f(a,b);cout<<a<<""<<b<<endl;return0;}答:1010【2.20】分析下面程序輸出結(jié)果。#include<iostream>usingnamespacestd;int&f(int&i){i+=10;returni;}intmain(){intk=0;int&m=f(k);cout<<k<<endl;m=20;cout<<k<<endl;return0;}答:1020【2.21】舉例說明能夠使用const代替#define以消除#define不安全性。答:比如#include<iostream.h>#defineA2+4#defineBA*3voidmain(){cout<<B<<endl;}上面程序運(yùn)行結(jié)果是14而不是18但很輕易被認(rèn)為是18。用const代替#define就能得到正確結(jié)果從而消除了#define不安全性。#include<iostream.h>constA=2+4;constB=A*3;voidmain(){cout<<B<<endl;}運(yùn)行結(jié)果為18?!?.22】編寫一個C++格調(diào)程序,用動態(tài)分配空間方法計算Fibonacci數(shù)列前20項,并存放到動態(tài)分配空間中。#include<iostream>usingnamespacestd;intmain(){inti;int*p;p=newint[20];p[0]=0;p[1]=1;cout<<*p<<""<<*(p+1)<<"";for(i=2;i<20;i++){p[i]=p[i-2]+p[i-1];cout<<*(p+i)<<"";}deletep;return0;}【2.23】編寫一個C++格調(diào)程序,建立一個被稱為sroot()函數(shù),返回其參數(shù)二次方根。重載sroot()3次,讓它返回整數(shù)、長整數(shù)與雙精度數(shù)二次方根(計算二次方根時,能夠使用標(biāo)準(zhǔn)庫函數(shù)sqrt())。#include<iostream.h>#include<math.h>intsroot(intx){return(int)sqrt(x);}floatsroot(floatx){return(float)sqrt(x);}doublesroot(doublex){return(double)sqrt(x);}voidmain()//test{inti=4;intresultI=sroot(i);floatj=4.0;floatresultJ=sroot(j);doublek=4.0000;doubleresultK=sroot(k);}【2.24】編寫一個C++格調(diào)程序,處理百錢問題:將一元人民幣兌換成1、2、5分硬幣,有多少種換法?#include<iostream>usingnamespacestd;intmain(){inti,j,k;intsum=0;for(i=0;i<=100;i++)for(j=0;j<=50;j++)for(k=0;k<=20;k++){if(i*1+2*j+5*k==100)sum++;}cout<<"總數(shù)為"<<sum<<endl;}【2.25】編寫一個C++格調(diào)程序,輸入兩個整數(shù),將它們按由小到大次序輸出。要求使用變量引用。#include<iostream>usingnamespacestd;voidswap(int&x,int&y){inttemp=x;x=y;y=temp;}intmain(){inta,b;cin>>a>>b;if(a>b)swap(a,b);cout<<a<<b;return0;}第三章:【3.7】在下面關(guān)于對結(jié)構(gòu)函數(shù)描述中,正確是(A)。A.結(jié)構(gòu)函數(shù)能夠帶有返回值B.結(jié)構(gòu)函數(shù)名字與類名完全相同C.結(jié)構(gòu)函數(shù)必須帶有參數(shù)D.結(jié)構(gòu)函數(shù)必須定義,不能默認(rèn)【3.8】在申明類時,下面說法正確是(C)。A.能夠在類申明中給數(shù)據(jù)組員賦初值B.?dāng)?shù)據(jù)組員數(shù)據(jù)類型能夠是registerC.private、public、protected能夠按任意次序出現(xiàn)D.沒有用private、public、protected定義數(shù)據(jù)組員是公有組員【3.9】在下面關(guān)于析構(gòu)函數(shù)特征描述中,正確是(C)。A.一個類中能夠定義多個析構(gòu)函數(shù)B.析構(gòu)函數(shù)名與類名完全相同C.析構(gòu)函數(shù)不能指定返回類型D.析構(gòu)函數(shù)能夠有一個或多個參數(shù)【3.10】結(jié)構(gòu)函數(shù)是在(B)時被執(zhí)行。A.程序編譯B.創(chuàng)建對象C.創(chuàng)建類D.程序裝人內(nèi)存【3.11】在下面關(guān)于靜態(tài)組員函數(shù)描述中,正確是(B)。A.在靜態(tài)組員函數(shù)中能夠使用this指針B.在建立對象前,就能夠為靜態(tài)數(shù)據(jù)組員賦值C.靜態(tài)組員函數(shù)在類外定義時,要用static前綴D.靜態(tài)組員函數(shù)只能在類外定義【3.12】在下面關(guān)于友元函數(shù)描述中,正確說法是〔A)。A.友元函數(shù)是獨(dú)立于當(dāng)前類外部函數(shù)B.一個友元函數(shù)不能同時定義為兩個類友元函數(shù)C.友元函數(shù)必須在類外部定義D.在外部定義友元函數(shù)時,必須加關(guān)鍵字friend【3.13】友元作用之一是(A)。A.提升程序運(yùn)行效率B.加強(qiáng)類封裝性C.實現(xiàn)數(shù)據(jù)隱藏性D.增加組員函數(shù)種類【3.14】以下程序運(yùn)行結(jié)果是(B)。#include<iostream>usingnamespacestd;classB{public: B(){} B(inti,intj) {x=i; y=j; } voidprintb() {cout<<x<<","<<y<<endl; }private: intx,y;};classA{public: A() {} A(intI,intj); voidprinta();private: Bc;};A::A(inti,intj):c(i,j){}voidA::printa(){c.printb();}intmain(){Aa(7,8); a.printa(); return0;}A.8,9B.7,8C.5,6D.9,10【3.15】以下程序運(yùn)行結(jié)果是(D)。#include<iostream>usingnamespacestd;classA{public: voidset(inti,intj) {x=i; y=j; } intget_y() {returny; }private: intx,y;};classbox{public: voidset(intl,intw,ints,intp) {length=1; width=w; label.set(s,p); } intget_area() {returnlength*width; }private: intlength,width; Alabel;};intmain(){boxb;b.set(4,6,1,20);cout<<b.get_area()<<endl;return0;}A.24B.4C.20D.6【3.16】以下程序運(yùn)行結(jié)果是(B)。#include<iostream>usingnamespacestd;classSample{public: Sample(inti,intj) {x=i; y=j; } voiddisp() {cout<<"disp1"<<endl; } voiddisp()const {cout<<"disp2"<<endl; } private: intx,y;};intmain(){constSamplea(1,2);a.disp();return0;}A.disp1B.disp2C.disp1disp2D.程序編譯犯錯【3.17】以下程序運(yùn)行結(jié)果是(B)。#include<iostream>usingnamespacestd;classR{public: R(intr1,intr2) {R1=r1; R2=r2; } voidprint(); voidprint()const;private: intR1,R2;};voidR::print(){cout<<R1<<","<<R2<<endl;}voidR::print()const{cout<<R1<<","<<R2<<endl;}intmain(){Ra(6,8);constRb(56,88);b.print();return0;}A.6,8B.56,88C.0,0D.8,6【3.18】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classtoy{public: toy(intq,intp) {quan=q; price=p; } intget_quan() {returnquan; } intget_price() {returnprice; }private: intquan,price;};intmain(){toyop[3][2]={ toy(10,20),toy(30,48), toy(50,68),toy(70,80),toy(90,16),toy(11,120),};for(inti=0;i<3;i++){cout<<op[i][0].get_quan()<<",";cout<<op[i][0].get_price()<<"\n";cout<<op[i][1].get_quan()<<",";cout<<op[i][1].get_price()<<"\n";}cout<<endl;return0;}10,2030,4850,6870,8090,1611,120【3.19】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classexample{public: example(intn) {i=n; cout<<"Constructing\n"; } ~example() {cout<<"Destructing\n"; } intget_i() {returni; }private: inti;};intsqr_it(exampleo){returno.get_i()*o.get_i();}intmain(){examplex(10);cout<<x.get_i()<<endl;cout<<sqr_it(x)<<endl;return0;}10100DestructingDestructing【3.20】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classaClass{public: aClass() {total++; } ~aClass() {total--; } intgettotal() {returntotal; }private: staticinttotal;};intaClass::total=0;intmain(){aClasso1,o2,o3;cout<<o1.gettotal()<<"objectsinexistence\n";aClass*p;p=newaClass;if(!p){cout<<"Allocationerror\n";return1;}cout<<o1.gettotal();cout<<"objectsinexistenceafterallocation\n";deletep;cout<<o1.gettotal();cout<<"objectsinexistenceafterdeletion\n";return0;}3objectsinexistence4objectsinexistenceafterallocation3objectsinexistenceafterdeletion【3.21】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classtest{public: test(); ~test(){};private: inti;};test::test(){i=25;for(intctr=0;ctr<10;ctr++){cout<<"Countingat"<<ctr<<"\n";}}testanObject;intmain(){return0;}Countingat0Countingat1Countingat2Countingat3Countingat4Countingat5Countingat6Countingat7Countingat8Countingat9【3.22】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classA{ inta,b;public: A() {a=0; b=0; cout<<"Defaultconstructorcalled.\n"; } A(inti,intj) {a=i; b=j; cout<<"Constructor:a="<<a<<",b="<<b<<endl; }};intmain(){Aa[3];Ab[3]={A(1,2),A(3,4),A(5,6)};return0;}Defaultconstructorcalled.Defaultconstructorcalled.Defaultconstructorcalled.Constructor:a=1,b=2Constructor:a=3,b=4Constructor:a=5,b=6【3.23】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classTest{private: intval;public: Test() {cout<<"default."<<endl; } Test(intn) {val=n; cout<<"Con."<<endl; } Test(constTest&t) {val=t.val; cout<<"Copycon."<<endl; }};intmain(){Testt1(6);Testt2=t1;Testt3;t3=t1;return0;}Con.Copycon.Default.【3.24】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classN{private: intA; staticintB;public: N(inta) {A=a; B+=a; } staticvoidf1(Nm);};voidN::f1(Nm){cout<<"A="<<m.A<<endl;cout<<"B="<<B<<endl;}intN::B=0;intmain(){NP(5),Q(9);N::f1(P);N::f1(Q);return0;}A=5B=14A=9B=14【3.25】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classM{ intx,y;public: M() {x=y=0; } M(inti,intj) {x=i; y=j; } voidcopy(M*m); voidsetxy(inti,intj) {x=i; y=j; } voidprint() {cout<<x<<","<<y<<endl; }};voidM::copy(M*m){x=m->x;y=m->y;}voidfun(Mm1,M*m2){m1.setxy(12,15);m2->setxy(22,25);}intmain(){Mp(5,7),q;q.copy(&p);fun(p,&q);p.print();q.print();return0;}5,722,25【3.26】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classM{ intA; staticintB;public: M(inta) {A=a; B+=a; cout<<"Constructing"<<endl; } staticvoidf1(Mm); ~M() {cout<<"Destructing\n"; }};voidM::f1(Mm){cout<<"A="<<m.A<<endl;cout<<"B="<<B<<endl;}intM::B=0;intmain(){Mp(5),Q(10);M::f1(p);M::f1(Q);return0;}ConstructingConstructingA=5B=15DestructingA=10B=15DestructingDestructingDestructing【3.27】指出以下程序中錯誤,并說明為何。#include<iostream>usingnamespacestd;classStudent{public: voidprintStu();private: charname[10]; intage; floataver;};intmain(){Studentp1,p2,p3;p1.age=30;...return0;}age為private不能付值【3.28】指出以下程序中錯誤,并說明為何。#include<iostream>usingnamespacestd;classStudent{ intsno; intage; voidprintStu(); voidsetSno(intd);};voidprintStu();{cout<<"\nSnois"<<sno<<",";cout<<"ageis"<<age<<"."<<endl;}voidsetSno(ints){sno=s;}voidsetAge(inta){age=a;}intmain(){Studentlin;lin.setSno(1);lin.setAge(20);lin.printStu();}'classStudent'不存在一個叫'setAge'方式【3.29】指出以下程序中錯誤,并說明為何。#include<iostream>usingnamespacestd;classPoint{public: intx,y;private: Piont() {x=1;y=2; }};intmain(){Pointcpoint;cpoint.x=2;return0;}構(gòu)筑函數(shù)錯誤【3.30】下面是一個計算器類定義,請完成該類組員函數(shù)實現(xiàn)。classcounter{public: counter(intnumber); voidincrement();//給原值加1 voiddecrement();//給原值減1 intgetvalue();//取得計數(shù)器值 intprint();//顯示計數(shù)private: intvalue;}; counter::counter(intnumber){value=number;}voidcounter::increment(intn){value+=n;}voidcounter::decrement(){value--;}intcounter::getvalue(){returnvalue;}voidcounter::print(){printf("%d\n",getvalue());}intmain(){inta,b;scanf("%d%d",&a,&b);counterct(a);ct.increment(b);ct.decrement();ct.print();return0;}【3.31】依照注釋語句提醒,實現(xiàn)類Date組員函數(shù)。#include<iostream>usingnamespacestd;classDate{public: voidprintDate();//顯示日期 voidsetDay(intd);//設(shè)置日值 voidsetMonth(intm);//設(shè)置月值 voidsetYear(inty);//設(shè)置年值private: intday,month,year;}intDate::setyear(inty){year=y;returnyear;}intDate::setmonth(intm){month=m;returnmonth;}intDate::setday(intd){day=d;returnday;}VoidDate::printdate(){cout<<year<<"."<<month<<"."<<day<<endl;};intmain(){DatetestDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear();testDay.printDate();return0;}【3.32】建立類cylinder,cylinder結(jié)構(gòu)函數(shù)被傳遞了兩個double值,分別表示圓柱體半徑和高度。用類cylinder計算圓柱體體積,并存放在一個double變量中。在類cylinder中包含一個組員函數(shù)vol,用來顯示每個cylinder對象體積。#include<iostream>usingnamespacestd;#definePI3.14159classCylinder{public:Cylinder(doubleradius,doubleheight):radius(radius),height(height),volume(PI*radius*radius*height){total_vol+=volume;}doublevol()const;friendvoidgetParas(double&radius,double&height,double&vol,double&total_vol,constCylinder&obj);private:doubleradius;//radiusdoubleheight;//heightdoublevolume;//volumeofcurrentobjectstaticdoubletotal_vol;//totalvolume};doubleCylinder::total_vol=0;doubleCylinder::vol()const{returnthis->volume;}voidgetParas(double&radius,double&height,double&vol,double&total_vol,constCylinder&obj){//getprivatememberofCylinderradius=obj.radius;height=obj.height;vol=obj.volume;total_vol=obj.total_vol;}intmain(){doublerd=0,hg=0,vol=0,total_vol=0;Cylindercld_1(2,3.5),cld_2(5.2,7),cld_3(3.9,4.0);//3objectsgetParas(rd,hg,vol,total_vol,cld_3);cout<<"Cylinder3:"<<endl;cout<<"radius:"<<rd<<endl;cout<<"height:"<<hg<<endl;cout<<"volume:"<<vol<<endl;cout<<"TotalVolume:"<<total_vol<<endl;system("pause");return0;}【3.33】構(gòu)建一個類book,其中含有兩個私有數(shù)據(jù)組員qu和price,將qu初始化為1~5,將price初始化為qu10倍,建立一個有5個元素數(shù)組對象。顯示每個對象數(shù)組元素qu*price值。#include<iostream.h>classbook{intqu,price;public:book(intq){qu=q;price=10*q;}intget_qu(){returnqu;}intget_price(){returnprice;}};voidmain(){bookobj[5]={1,2,3,4,5};for(inti=0;i<5;i++){cout<<"數(shù)組對象"<<i+1<<"qu*price值為:"<<obj[i].get_qu()*obj[i].get_price()<<endl;}}【3.34】修改習(xí)題3.33,經(jīng)過對象指針訪問對象數(shù)組,使程序以相反次序顯示每個對象數(shù)組元素qu*price值。#include<iostream.h>classbook{intqu,price;public:book(intq){qu=q;price=10*q;}intget_qu(){returnqu;}intget_price(){returnprice;}};voidmain(){bookobj[5]={1,2,3,4,5};book*p;p=&obj[4];for(inti=0;i<5;i++){cout<<"數(shù)組對象"<<i+1<<"qu*price值為:"<<p->get_qu()*p->get_price()<<endl;p--;}}【3.35】構(gòu)建一個類Stock,含字符數(shù)組stockcode[]及整型數(shù)據(jù)組員quan、雙精度型數(shù)據(jù)組員price。結(jié)構(gòu)函數(shù)含3個參數(shù):字符數(shù)組na[]及q、p。當(dāng)定義Stock類對象時,將對象第1個字符串參數(shù)賦給數(shù)據(jù)組員stockcode,第2和第3個參數(shù)分別賦給quan、price。未設(shè)置第2和第3個參數(shù)時,quan值為1000,price值為8.98。組員函數(shù)print沒有形參,需使用this指針,顯示對象數(shù)據(jù)組員內(nèi)容。假設(shè)類Stock第1個對象三個參數(shù)分別為:“600001”,3000和5.67,第2個對象第1個數(shù)據(jù)組員值是“600001”,第2和第3個數(shù)據(jù)組員值取默認(rèn)值。要求編寫程序分別顯示這兩個對象數(shù)據(jù)組員值。#include<iostream>//constunsignedMAX_LEN=256;classStock{public://這里用初始化形參列表Stock(charna[],intq=1000,doublep=8.98):stockcode(na),quan(q),price(p){}voidprint(void){std::cout<<this->stockcode<<""<<quan<<""<<price<<std::endl;}private:char*stockcode;//或改為charstockcode[MAX_LEN];//其中MAX_LEN定義在前為一常量:constunsignedMAX_LEN=256;intquan;doubleprice;};//mainfunctionintmain(intargc,char*argv[]){charszTestString[]="600001";//It'sterminatedwith'\0'intiTestInteger=3000;doubledTestDouble=5.67;StockstObj1(szTestString,iTestInteger,dTestDouble);StockstObj2(szTestString);stObj1.print();stObj2.print();return0;}//endmai【3.36】編寫一個程序,已經(jīng)有若干學(xué)生數(shù)據(jù),包含學(xué)號、姓名、成績,要求輸出這些學(xué)生數(shù)據(jù)并計算出學(xué)生人數(shù)和平均成績(要求將學(xué)生人數(shù)和總成績用靜態(tài)數(shù)據(jù)組員表示)。#include<stdio.h>#include<string.h>#defineN4classstudent{intno;charname[10];intdeg1;//語文成績intdeg2;//數(shù)學(xué)成績intdeg3;//英語成績staticintsum1;//語文總分staticintsum2;//數(shù)學(xué)總分staticintsum3;//英語總分public:student(intn,charna[],intd1,intd2,intd3){no=n;strcpy(name,na);deg1=d1;deg2=d2;deg3=d3;sum1+=deg1;sum2+=deg2;sum3+=deg3;}doubleavg1(){return(sum1*1.0)/N;}doubleavg2(){return(sum2*1.0)/N;}doubleavg3(){return(sum3*1.0)/N;}voiddisp(){printf("%4d%10s%6d%6d%6d\n",no,name,deg1,deg2,deg3);}};intstudent::sum1=0;intstudent::sum2=0;intstudent::sum3=0;voidmain(){double(student::*fp)();//定義組員函數(shù)指針students1(1,"Li",67,89,90);students2(2,"Ma",67,89,90);students3(3,"Zheng",67,89,90);students4(4,"Chen",67,89,90);printf("輸出結(jié)果\n");s1.disp();s2.disp();s3.disp();s4.disp();fp=student::avg1;printf("語文平均分%g\n",(s1.*fp)());fp=student::avg2;printf("數(shù)學(xué)平均分%g\n",(s1.*fp)());fp=student::avg3;printf("英語平均分%g\n",(s1.*fp)());}第四章:【4.8】使用派中類主要原因是(c)。A.提升代碼可重用性B.提升程序運(yùn)行效率C.加強(qiáng)類封裝性D.實現(xiàn)數(shù)據(jù)隱藏【4.9】假設(shè)已經(jīng)定義好了一個類student,現(xiàn)在要定義類derived,它是從student私有派生,定義類derived正確寫法是(c)。A.clasederived::studentprivate{…};B.clasederived::studentpublic{…};C.clasederived::privatestudent{…};D.clasederived::publicstudent{…};【4.10】在多繼承結(jié)構(gòu)函數(shù)定義中,幾個基類結(jié)構(gòu)函數(shù)用(c)分隔。A.:B.;C.,D.::【4.11】設(shè)置虛基類目標(biāo)是(b)。A.簡化程序B.消除二義性C.提升運(yùn)行效率D.降低目標(biāo)代碼【4.12】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classB1{public: B1(inti) {b1=i; cout<<"ConstructorB1."<<endl; } voidPrint() {cout<<b1<<endl; }private: intb1;};classB2{public: B2(inti) {b2=i; cout<<"ConstructorB2."<<endl; } voidPrint() {cout<<b2<<endl; }private: intb2;};classA:publicB2,publicB1{public: A(inti,intj,intl); voidPrint();private: inta;};A::A(inti,intj,intl):B1(i),B2(j){a=l;cout<<"ConstructorA."<<endl;}voidA::Print(){B1::Print();B2::Print();cout<<a<<endl;}intmain(){Aaa(3,2,1);aa.Print();return0;}321【4.13】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classMain{protected: char*mainfood;public: Main(char*name) {mainfood=name; }};classSub{protected: char*subfood;public: Sub(char*name) {subfood=name; }};classMenu:publicMain,publicSub{public: Menu(char*m,char*s):Main(m),Sub(s) {} voidshow();};voidMenu::show(){cout<<"主食="<<mainfood<<endl;cout<<"副食="<<subfood<<endl;}intmain(){Menum("bread","steak");m.show();return0;}主食=bread副食=stea【4.14】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classA{private: inta;public: A() {a=0;} A(inti) {a=i;} voidPrint() {cout<<a<<","; }};classB:publicA{private: intb1,b2;public: B() {b1=0;b2=0; } B(inti) {b1=i;b2=0; } B(inti,intj,intk):A(i),b1(j),b2(k) {} voidPrint() {A::Print(); cout<<b1<<","<<b2<<endl; }};intmain(){Bob1,ob2(1),ob3(3,6,9);ob1.Print();ob2.Print();ob3.Print();return0;}0,0,00,1,03,6,9【4.15】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classB1{ intb1;public: B1(inti) {b1=i; cout<<"constructorB1."<<i<<endl; } voidprint() {cout<<b1<<endl; }};classB2{ intb2;public: B2(inti) {b2=i; cout<<"constructorB2."<<i<<endl; } voidprint() {cout<<b2<<endl; }};classB3{ intb3;public: B3(inti) {b3=i; cout<<"constructorB3."<<i<<endl; } intgetb3() {returnb3; }};classA:publicB2,publicB1{ inta;B3bb;public: A(inti,intj,intk,intl):B1(i),B2(j),bb(k) {a=l; cout<<"constructorA."<<l<<endl; } voidprint() {B1::print(); B2::print(); cout<<a<<","<<bb.getb3()<<endl; }};intmain(){Aaa(1,2,3,4);aa.print();return0;}ConstructorB2.ConstructorB1.1ConstructorB3.3ConstructorA.4124,3【4.16】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classA{public: A(inti,intj) {x=i; y=j; } intsum() {returnx+y; }private: intx,y;};classB:publicA{public: B(inti,intj,intk,intl); intsum() {returnw+h; }private: intw,h;};B::B(inti,intj,intk,intl):A(i,j){w=k;h=l;}voidf(A&s){cout<<s.sum()<<endl;}intmain(){Bob(1,3,5,7);f(ob);return0;}4【4.17】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classA{ inta,b;public: A(inti,intj) {a=i;b=j; } voidMove(intx,inty) {a+=x;b+=y; } voidShow() {cout<<"("<<a<<","<<b<<")"<<endl; }};classB:privateA{ intx,y;public: B(inti,intj,intk,intl):A(i,j) {x=k;y=l; } voidShow() {cout<<x<<","<<y<<endl; } voidfun() {Move(3,5); } voidf1() {A::Show(); }};intmain(){Ae(1,2);e.Show();Bd(3,4,5,6);d.fun();d.Show();d.f1();return0;}(1,2)5,6(6,9)【4.18】寫出下面程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classbase1{public: base1() {cout<<"classbase1"<<endl; }};classbase2{public: base2() {cout<<"classbase2"<<endl; }};classlevel1:publicbase2,virtualpublicbase1{public: level1() {cout<<"classlevel1"<<endl; }};classlevel2:publicbase2,virtualpublicbase1{public: level2() {cout<<"classlevel2"<<endl; }};classtoplevel:publiclevel1,virtualpubliclevel2{public: toplevel() {cout<<"classtoplevel"<<endl; }};intmain(){toplevelobj;return0;}classbase1classbase2classlevel2classbase2classlevel1classtoplevel【4.21】已經(jīng)有類Time和Date,要求設(shè)計一個派生類Birthtime,它繼承類Time和Date,而且增加一個數(shù)據(jù)組員Childname用于表示小孩名字,同時設(shè)計主程序顯示一個小孩出生時間和名字。classTime{public: Time(inth,intm,ints) {hours=h;minutes=m;seconds=s;}voiddisplay(){cout<<"出生時間:"<<hours<<"時"<<minutes<<"分"<<seconds<<"秒"<<endl;}protected: inthours,minutes,seconds;};classDate{public: Date(intm,intd,inty) {month=m; day=d; year=y; } voiddisplay() {cout<<"出生年月:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl; }protected: intmonth,day,year;};classBirthtime:publicTime,publicDate{public:Birthtime(char*Cn,intyy,intmm,intdd,inthh,intmint,intss):Time(hh,mint,ss),Date(mm,dd,yy){strcpy(Childname,Cn);}voiddisplay(){cout<<"姓名:"<<Childname<<endl;Date::display();Time::display();}protected:charChildname[20];}intmain(){Birthtimeyx("曉鳳",,12,13,14,20,30);yx.display();return0;}【4.22】編寫一個學(xué)生和教師數(shù)據(jù)輸人和顯示程序,學(xué)生數(shù)據(jù)有編號、姓名、班號和成績,教師數(shù)據(jù)有編號、姓名、職稱和部門。要求將編號、姓名輸入和顯示設(shè)計成一個類person,并作為學(xué)生數(shù)據(jù)操作類student和教師數(shù)據(jù)操作類teacher基類。#include<iostream>#include<string>usingnamespacestd;classperson{private:intno;stringname;public:voidinput(){cout<<“請輸入編號和姓名”;cin>>no>>name;}voiddisplay(){cout<<“編號”<<no<<endl;cout<<“姓名”<<name<<endl;}};classstudent:publicperson{private:intbh,score;public:voidget(){input();cout<<“請輸入班號和成績”;cin>>bh>>score;}voidshow(){display();cout<<“班號”<<bh<<endl;cout<<“成績”<<score<<endl;}};classteacher:publicperson{private:stringzc,bm;public:voidget(){input();cout<<“請輸入職稱和部門”;cin>>zc>>bm;}voidshow(){display();cout<<“職稱”<<zc<<endl;cout<<“部門”<<bm<<endl;}};intmain(){students;teachert;s.get();s.show();t.get();t.show();return0;}第五章:【5.7】關(guān)于運(yùn)算符重載正確描述是(A)。A.C++語言允許在重載運(yùn)算符時改變運(yùn)算符操作個數(shù)B.C++語言允許在重載運(yùn)算符時改變運(yùn)算符優(yōu)先級C.C++語言允許在重載運(yùn)算符時改變運(yùn)算符結(jié)合性D.C++語言允許在重載運(yùn)算符時改變運(yùn)算符原來功效【5.8】能用友元函數(shù)重載運(yùn)算符是(A)。A.+B.=C.[]D.->【5.9】關(guān)于虛函數(shù),正確描述是(A)。A.結(jié)構(gòu)函數(shù)不能是虛函數(shù)B.析構(gòu)函數(shù)不能是虛函數(shù)C.虛函數(shù)能夠是友元函數(shù)D.虛函數(shù)能夠是靜態(tài)組員函數(shù)【5.10】派生類中虛函數(shù)原型(D)。A.函數(shù)類型能夠與基類中虛函數(shù)原型不一樣B.參數(shù)個數(shù)能夠與基類中虛函數(shù)原型不一樣C.參數(shù)類型能夠與基類中虛函數(shù)原型不一樣D.以上都不對【5.11】假如在基類中將show申明為不帶返回值純虛函數(shù),正確寫法是(D)。A.virtualshow()=0;B.virtualvoidshow();C.virtualvoidshow()=0;D.voidshow()=0virtual;【5.12】以下關(guān)于純虛函數(shù)與抽象類描述中,錯誤是(C)。A.純虛函數(shù)是一個特殊函數(shù),它允許沒有詳細(xì)實現(xiàn)B.抽象類是指具備純虛函數(shù)類C.一個基類說明中有純虛函數(shù),該基類派生類一定不再是抽象類D.抽象類只能作為基類來使用,其純虛函數(shù)實現(xiàn)由派生類給出【5.13】下面程序段中虛函數(shù)被重新定義方法正確嗎?為何?classbase{public: virtualintf(inta)=0; . . .};classderived:publicbase{public: intf(inta,intb) {returna*b; }.};正確【5.14】寫出以下程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classA{public: A(inti):x(i) {} A() {x=0; } friendAoperator++(Aa); friendAoperator--(A&a); voidprint();private: intx;};Aoperator++(Aa){++a.x;returna;}Aoperator--(A&a){--a.x;returna;}voidA::print(){cout<<x<<endl;}intmain(){Aa(7);++a;a.print();--a;a.print();return0;}76【5.15】寫出以下程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classWords{public: Words(char*s) {str=newchar[strlen(s)+1]; strcpy(str,s); len=strlen(s); } voiddisp(); charoperator[](intn);//定義下標(biāo)運(yùn)算符"[]"重載函數(shù)private: intlen; char*str;};charWords::operator[](intn){if(n<0||n>len-1)//數(shù)組邊界檢驗{cout<<"數(shù)組下標(biāo)超界!\n";return'';}elsereturn*(str+n);}voidWords::disp(){cout<<str<<endl;}intmain(){Wordsword("ThisisC++book.");word.disp();cout<<"第1個字符:";cout<<word[0]<<endl;//word[10]被解釋為word.operator[](10)cout<<"第16個字符:";cout<<word[15]<<endl;cout<<"第26個字符:";cout<<word[25]<<endl;return0;}ThisisC++book.第1個字符T第16個字符:第26個字符數(shù)據(jù)下標(biāo)超界【5.16】寫出以下程序運(yùn)行結(jié)果。#include<iostream>usingnamespacestd;classLength{ intmeter;public: Length(intm) {meter=m; } operatordouble() {return(1.0*meter/1000); }};intmain(){Lengtha(1500);doublem=float(a);cout<<"m="<<m<<"千米"<<endl;return0;}M=1.5千米【5.17】編一個程序,用組員函數(shù)重載運(yùn)算符“+”和“-”將兩個二維數(shù)組相加和相減,要求第一個二維數(shù)組值由結(jié)構(gòu)函數(shù)設(shè)置,另一個二維數(shù)組值由鍵盤輸入。#include<iostream.h>classTow_arr{//定義類Tow_arrprotected:inta[2][3];public:Tow_arr(int,int,int,int,int,int);//結(jié)構(gòu)函數(shù)Tow_arr();//無參結(jié)構(gòu)函數(shù)voidSet();//設(shè)置二維數(shù)組數(shù)據(jù)函數(shù)voidShow();//顯示二維數(shù)組數(shù)據(jù)函數(shù)Tow_arroperator+(Tow_arr);//組員函數(shù)重載運(yùn)算符“+”Tow_arroperator-(Tow_arr);//組員函數(shù)重載運(yùn)算符“-”};//結(jié)構(gòu)函數(shù)完整Tow_arr::Tow_arr(inta1,inta2,inta3,inta4,inta5,inta6){a[0][0]=a1;a[0][1]=a2;a[0][2]=a3;a[1][0]=a4;a[1][1]=a5;a[1][2]=a6;}Tow_arr::Tow_arr()//無參結(jié)構(gòu)函數(shù)完整{for(inti=0;i<2;i++)for(intj=0;j<3;j++)a[i][j]=0;}voidTow_arr::Set()//設(shè)置二維數(shù)組數(shù)據(jù)函數(shù)完整{cout<<"數(shù)入2X3個整數(shù):"<<endl;for(inti=0;i<2;i++)for(intj=0;j<3;j++)cin>>a[i][j];}voidTow_arr::Show()//顯示二維數(shù)組數(shù)據(jù)函數(shù)完整{cout<<"二維數(shù)組內(nèi)數(shù)據(jù)是"<<endl;for(inti=0;i<2;i++){for(intj=0;j<3;j++)cout<<a[i][j]<<"”;cout<<'\n';}}}//組員函數(shù)重載運(yùn)算符“+”完整Tow_arrTow_arr::operator+(Tow_arradd2){Tow_arrtemp;for(inti=0;i<2;i++)for(intj=0;j<3;j++)temp.a[i][j]=a[i][j]+add2.a[i][j];returntemp;}//組員函數(shù)重載運(yùn)算符“-”完整Tow_arrTow_arr::operator-(Tow_arradd2){Tow_ar
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)學(xué)生社團(tuán)活動經(jīng)費(fèi)管理執(zhí)行制度
- 體育設(shè)施使用規(guī)范制度
- 企業(yè)績效評估與獎懲制度
- 2026年網(wǎng)易游戲策劃筆試題目及解析
- 2026年地理知識題庫世界地理與中國地理
- 2026年網(wǎng)絡(luò)安全管理與維護(hù)專業(yè)資質(zhì)認(rèn)證試題
- 2026年網(wǎng)絡(luò)協(xié)議工程師計算機(jī)網(wǎng)絡(luò)安全優(yōu)化題庫與解答
- 2025年公司注銷股東會決議
- 加油站應(yīng)急預(yù)案演練計劃方案
- 河北省石家莊市第四十中學(xué)2025-2026學(xué)年初三第一學(xué)期期末考試道德與法治試題(含答案)
- 2026年中國郵政儲蓄銀行招聘試題含答案
- 2025年度電氣工程師述職報告
- 檔案館機(jī)房設(shè)施設(shè)備管理制度
- 醫(yī)院行風(fēng)建設(shè)培訓(xùn)會課件
- 2025年中國抑郁障礙防治指南
- 2024年輕工行業(yè)經(jīng)濟(jì)運(yùn)行報告
- 電解銅銷售合同范本
- FGR的基因檢測策略與臨床解讀
- 建筑施工工地安全隱患排查清單
- 電力工程安全培訓(xùn)課件
- 中糧貿(mào)易錄用通知書
評論
0/150
提交評論