c++類與對(duì)象習(xí)題答案知識(shí)分享_第1頁(yè)
c++類與對(duì)象習(xí)題答案知識(shí)分享_第2頁(yè)
c++類與對(duì)象習(xí)題答案知識(shí)分享_第3頁(yè)
c++類與對(duì)象習(xí)題答案知識(shí)分享_第4頁(yè)
c++類與對(duì)象習(xí)題答案知識(shí)分享_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上c+類與對(duì)象習(xí)題答案專心-專注-專業(yè)1 概念填空題1.1 類定義的關(guān)鍵字是 class 。類的數(shù)據(jù)成員通常指定為 私有 成員。類的函數(shù)成員通常指定為 公有 成員,指定為 公有 的類成員可以在類對(duì)象所在域中的任何位置訪問它們,類的 私有和保護(hù) 只能被該類的成員函數(shù)或友元函數(shù)訪問。1.2類的訪問限定符包括 public、 private 和 protected 。類成員默認(rèn)的訪問方式是 private 。訪問限定符在類中 無(wú) 先后次序,各限定符 允許 (允許/不允許)多次出現(xiàn)。1.3 構(gòu)造函數(shù)的任務(wù)是 建立對(duì)象 。類中可以有 多 個(gè)構(gòu)造函數(shù),它們由 參數(shù) 區(qū)分。如果類說(shuō)明

2、中沒有給出構(gòu)造函數(shù),則C+編譯器會(huì)提供構(gòu)造函數(shù),該函數(shù) 不完成 (完成/不完成)對(duì)象初始化工作。1.4復(fù)制構(gòu)造函數(shù)的參數(shù)是 對(duì)象的復(fù)制 ,當(dāng)程序沒有給出復(fù)制構(gòu)造函數(shù)時(shí),編譯系統(tǒng)會(huì)提供 默認(rèn)復(fù)制構(gòu)造函數(shù) ,完成類對(duì)象的 復(fù)制 。復(fù)制構(gòu)造函數(shù)被調(diào)用情況有 3 種。1.5析構(gòu)函數(shù)在對(duì)象 釋放 時(shí)被自動(dòng)調(diào)用。類中沒有定義析構(gòu)函數(shù)時(shí),編譯系統(tǒng)會(huì)提供一個(gè)默認(rèn)的析構(gòu)函數(shù)。該函數(shù) 不完成 (完成/不完成)具體對(duì)象的清理工作。2. 簡(jiǎn)答題2.1 為什么說(shuō)類與對(duì)象的概念是客觀世界的反映?2.2 簡(jiǎn)單解釋什么是面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝性。2.3 引用作為函數(shù)參數(shù)時(shí)為什么能實(shí)現(xiàn)兩個(gè)實(shí)參之間的數(shù)據(jù)交換?為什么對(duì)應(yīng)實(shí)參不能

3、為引用?為什么返回值為引用的函數(shù)可以作為左值?2.4 什么是默認(rèn)的構(gòu)造函數(shù)?默認(rèn)的構(gòu)造函數(shù)可以有多少個(gè)?2.5 復(fù)制構(gòu)造函數(shù)用于哪3個(gè)方面?2.6 為什么在友元函數(shù)的函數(shù)體內(nèi)訪問對(duì)象成員時(shí),必須用對(duì)象名加運(yùn)算符”.”再加對(duì)象成員名?2.7 類的靜態(tài)數(shù)據(jù)成員與函數(shù)中的靜態(tài)成員有何異同?2.8 類的成員函數(shù)在什么情況下應(yīng)該定義為私有的?這樣做的目的是什么?2.9 友元關(guān)系有何性質(zhì)?友元關(guān)系的優(yōu)點(diǎn)和缺點(diǎn)各有哪些?3.選擇題3.1 數(shù)據(jù)封裝就是將一組數(shù)據(jù)和與這組數(shù)據(jù)有關(guān)操作組裝在一起,形成一個(gè)實(shí)體,這實(shí)體也就是( B )。A類 B對(duì)象 C函數(shù)體 D數(shù)據(jù)塊3.2 類的實(shí)例化是指( B )。A定義類B創(chuàng)建

4、類的對(duì)象C指明具體類D調(diào)用類的成員3.3下列說(shuō)法中正確的是( B )。A類定義中只能說(shuō)明函數(shù)成員的函數(shù)頭,不能定義函數(shù)體 B類中的函數(shù)成員可以在類體中定義,也可以在類體之外定義 C類中的函數(shù)成員在類體之外定義時(shí)必須要與類聲明在同一文件中 D在類體之外定義的函數(shù)成員不能操作該類的私有數(shù)據(jù)成員3.4有如下類定義:class sample int n;public:sample (int i=0):n(i) void setValue(int n0);;下列關(guān)于setValue成員函數(shù)的實(shí)現(xiàn)中,正確的是( B )。Asample:setValue(int n0)n=n0;Bvoid sample:s

5、etValue(int n0)n=n0;Cvoid setValue(int n0)n=n0;DsetValue(int n0)n=n0;3.5在下面的類定義中,錯(cuò)誤的語(yǔ)句是( C )。class sample public: sample(int val);/ sample( ); / private:int a=2.5; / public:sample( ); /; ABCD3.6類的構(gòu)造函數(shù)被自動(dòng)調(diào)用執(zhí)行的情況是在創(chuàng)建該類的(C)。 A成員函數(shù)時(shí) B數(shù)據(jù)成員時(shí) C對(duì)象時(shí) D友元函數(shù)時(shí)3.7(A)是析構(gòu)函數(shù)的特征。 A一個(gè)類中只能定義一個(gè)析構(gòu)函數(shù) B析構(gòu)函數(shù)名與類名不同 C析構(gòu)函數(shù)的定義只

6、能在類體內(nèi) D析構(gòu)函數(shù)可以有一個(gè)或多個(gè)參數(shù)3.8 在下列函數(shù)原型中,可以作為類AA構(gòu)造函數(shù)的是( D )。 Avoid AA(int); Bint AA( ); CAA(int) const; DAA(int)3.9關(guān)于成員函數(shù)特征的下述描述中,(A)是錯(cuò)誤的。 A成員函數(shù)一定是內(nèi)聯(lián)函數(shù) B成員函數(shù)可以重載 C成員函數(shù)可以設(shè)置參數(shù)的默認(rèn)值 D成員函數(shù)可以是靜態(tài)的3.10不屬于成員函數(shù)的是(B )。 A靜態(tài)成員函數(shù) B友元函數(shù) C構(gòu)造函數(shù) D析構(gòu)函數(shù)3.11已知類A是類B的友元,類B是類C的友元,則(C )。 A類A一定是類C的友元 B類C一定是類A的友元 C類C的成員函數(shù)可以訪問類B的對(duì)象的任

7、何成員 D類A的成員函數(shù)可以訪問類B的對(duì)象的任何成員3.12有如下類定義: class AAint a; public:int getRef( ) const return &a; /返回類型為int, return &a為地址int getValue( ) const return a; /void set(int n) consta=n; /常函數(shù)不能修改成員friend void show(AA aa) const cout<<a; /友元函數(shù)不能是常函數(shù);其中的四個(gè)函數(shù)定義中正確的是(B)。A BCD3.13有如下類定義:class Testpublic:T

8、est( )a=0;c=0;/常成員必須在初始化列表中初始化int f(int a) const this->a=a;/常函數(shù)不能修改成員void h(int b) Test:b=b;/static int g( ) return a;/靜態(tài)函數(shù)要通過(guò)對(duì)象訪問成員private:int a;static int b;const int c;int Test:b=0;在標(biāo)注號(hào)碼的行中,能被正確編譯的是(C)。A B C D4寫出程序程序執(zhí)行結(jié)果。4.1#include<iostream>using namespace std;class Test public:Test( )

9、n+=2; Test( ) n-=3;static int getNum( ) return n;private:static int n;int Test:n=1;int main( )Test* p = new Test;delete p;cout<<”n=”<<Test:getNum( )<<endl;return 0;n=04.2#include<iostream>using namespace std;class AAint n;public:AA(int k):n(k)int get( ) return n;int get( ) co

10、nst return n+1;int main( )AA a(5);const AA b(6);cout<<a.get()<<”,”<<b.get();return 0;574.3#include<iostream>using namespace std;class MyClass public:int number;void set(int i);int number=3;void MyClass:set (int i)number=i;void main( )MyClass my1;int number=10;my1.set(5);cout&

11、lt;<my1.number<<endl;my1.set(number);cout<<my1.number<<endl;my1.set(:number);cout<<my1.number;51034.4#include<iostream>using namespace std;class Testprivate:static int val;int a;public:static int func( );void sfunc(Test &r);int Test:val=200;int Test:func( )return

12、 val+;void Test:sfunc(Test &r)r.a=125;cout<<"Result3="<<r.a<<endl;void main( )cout<<"Result1="<<Test:func( )<<endl;Test a;cout<<"Result2="<<a.func()<<endl;a.sfunc(a);Result1=200Result2=201Result1=1255.編程題5.1 構(gòu)造一個(gè)

13、日期時(shí)間類(Timedate),數(shù)據(jù)成員包括年、月、日和時(shí)、分、秒,函數(shù)成員包括設(shè)置日期時(shí)間和輸出時(shí)間,其中年、月用枚舉類型,并完成測(cè)試(包括用成員函數(shù)和用普通函數(shù))。#include <iostream.h>#include <conio.h>#include <iomanip.h>enum YRY2000,Y2001,Y2002,Y2003,Y2004,Y2005;/枚舉名必須是標(biāo)識(shí)符enum MTJan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec;class Timedateprivate:YR year;M

14、T month;int date;int hh;int mm;int ss;public:Timedate()year=Y2000;month=Jan;date=1;hh=0;mm=0;ss=0;Timedate(YR a,MT b,int c)year=a;month=b;date=c;hh=12;mm=30;ss=0;void getdate(YR &,MT &,int &);/體會(huì)用引用的優(yōu)點(diǎn),一次可返回3個(gè)值void gettime(int &,int &,int &);void putdate(YR ,MT ,int );void pu

15、ttime(int ,int ,int );void list();void Timedate:getdate(YR &y,MT &m,int &d)y=year;m=month;d=date;void Timedate:gettime(int &a,int &b,int &c)a=hh;b=mm;c=ss;void Timedate:putdate(YR a,MT b,int c)year=a;month=b;date=c;void Timedate:puttime(int a,int b,int c)hh=a;mm=b;ss=c;void T

16、imedate:list()/成員函數(shù)cout<<"year/month/date :"switch(year)case Y2000:cout<<"2000"break;case Y2001:cout<<"2001"break;case Y2002:cout<<"2002"break;case Y2003:cout<<"2003"break;case Y2004:cout<<"2004"break;cas

17、e Y2005:cout<<"2005"break;switch(month)/,case Jan:cout<<'/'<<"Jan"break;case Feb:cout<<'/'<<"Feb"break;case Mar:cout<<'/'<<"Mar"break;case Apr:cout<<'/'<<"Apr"break

18、;case May:cout<<'/'<<"May"break;case Jun:cout<<'/'<<"Jun"break;case Jul:cout<<'/'<<"Jul"break;case Aug:cout<<'/'<<"Aug"break;case Sep:cout<<'/'<<"Sep"

19、break;case Oct:cout<<'/'<<"Oct"break;case Nov:cout<<'/'<<"Nov"break;case Dec:cout<<'/'<<"Dec"break;cout<<'/'<<date<<endl;cout<<"hour:minite:second :"cout<<hh<&

20、lt;':'<<mm<<':'<<ss<<endl;void show(Timedate &td)/普通函數(shù),體會(huì)兩者的不同YR year;MT month;int date,hh,mm,ss;td.getdate(year,month,date);td.gettime(hh,mm,ss);cout<<"year/month/date :"switch(year)case Y2000:cout<<"2000"break;case Y2001:c

21、out<<"2001"break;case Y2002:cout<<"2002"break;case Y2003:cout<<"2003"break;case Y2004:cout<<"2004"break;case Y2005:cout<<"2005"break;switch(month)/,case Jan:cout<<'/'<<"Jan"break;case Feb:co

22、ut<<'/'<<"Feb"break;case Mar:cout<<'/'<<"Mar"break;case Apr:cout<<'/'<<"Apr"break;case May:cout<<'/'<<"May"break;case Jun:cout<<'/'<<"Jun"break;case J

23、ul:cout<<'/'<<"Jul"break;case Aug:cout<<'/'<<"Aug"break;case Sep:cout<<'/'<<"Sep"break;case Oct:cout<<'/'<<"Oct"break;case Nov:cout<<'/'<<"Nov"break;c

24、ase Dec:cout<<'/'<<"Dec"break;cout<<'/'<<date<<endl;cout<<"hour:minite:second :"cout<<hh<<':'<<mm<<':'<<ss<<endl;int main(int argc, char* argv)Timedate A(Y2004,Mar,3),B;A.list(

25、);B.list();B.putdate(Y2005,Oct,18);B.puttime(17,30,00);B.list();show(B);return 0;5.2 定義一個(gè)日期類Date,具有年月日等數(shù)據(jù)成員,顯示日期、加減天數(shù)等函數(shù)成員。注意需要考慮閏年。#include <iostream>using namespace std;class Dateint year,month,day;static const int days;bool LeapYear();bool EndofMonth();public:Date(int=1900,int=1,int =1);voi

26、d Increment(int );void Decrement(int);void SetDate(int,int,int);void Print();const int Date:days=0,31,28,31,30,31,30,31,31,30,31,30,31;Date:Date(int y,int m,int d)SetDate(y,m,d);void Date:SetDate(int y,int m,int d)year=(y>=1900 && y<=9999)?y:1900;month=(m>=1 &&m<=12)?m:1;

27、if(month=2 && LeapYear()day=(d>=1 && d<=29)?d:1;elseday=(d>=1 && d<=daysmonth)?d:1;bool Date:LeapYear()return (year%400 = 0) | (year%4=0 && year%100!=0)? true:false;bool Date:EndofMonth()if(month=2 && LeapYear()return day=29;elsereturn day=daysmont

28、h;void Date:Increment(int n)int i;for(i=1;i<=n;i+)if(EndofMonth() && month=12)year+;month=day=1;else if(EndofMonth()month+;day=1;elseday+;void Date:Decrement(int n)int i;for(i=1;i<=n;i+)if(day=1)if(month=1)year-; month=12; day=31;else if(month=3)day=LeapYear()?29:28; month=2;elseday=da

29、ys-month;elseday-;void Date:Print()cout<<year<<"-"<<month <<"-"<<day <<endl;void main()Date d1(2005,1,4),d2(2004,12,27);d1.Print();d1.Decrement(4);d1.Print();d2.Print();d2.Increment(70);d2.Print();5.3 定義一個(gè)圓類(Circle),屬性為半徑(radius)、圓周長(zhǎng)和面積,操作為輸入半徑

30、并計(jì)算周長(zhǎng)、面積,輸出半徑、周長(zhǎng)和面積。要求定義構(gòu)造函數(shù)(以半徑為參數(shù),默認(rèn)值為0,周長(zhǎng)和面積在構(gòu)造函數(shù)中生成)和復(fù)制構(gòu)造函數(shù)。#include <iostream>const double PI=3.1415;using namespace std;class Circledouble radius,length,area;public:Circle(double r=0)setr(r);length=2*PI*radius;area=PI*radius*radius;Circle(Circle& c)radius=c.radius ;length=c.length ;a

31、rea=c.area ;void print()cout<<"radius= "<<radius<<endl;cout<<"length= "<<length<<endl;cout<<"area= "<<area<<endl;void setr(double r)radius=r;int main()Circle c1(10),c2(c1);c1.print();c2.print();return 0;5.4 設(shè)計(jì)一個(gè)學(xué)校在冊(cè)人

32、員類(Person)。數(shù)據(jù)成員包括身份證號(hào)(IdPerson)、姓名(Name)、性別(Sex)、生日(Birth-day)和家庭住址(HomeAddress)。成員函數(shù)包括人員信息的錄入和顯示,還包括構(gòu)造函數(shù)與復(fù)制構(gòu)造函數(shù)。設(shè)計(jì)一個(gè)合適的初始值。#include <iostream>#include <cstring>const double PI=3.1415;using namespace std;struct dateint year,month,day;class Personchar ID12;char Name10;char Sex3;date Birth

33、;char HomeAdd20;public:Person()ID0=Name0=Sex0=HomeAdd0=0;Birth.year=Birth.month=Birth.day=0;Person(char id,char name,char sex,date birth,char homeadd)strcpy(ID,id);strcpy(Name,name);strcpy(Sex,sex);Birth=birth;strcpy(HomeAdd,homeadd);Person(Person& p)strcpy(ID,p.ID);strcpy(Name,p.Name);strcpy(Se

34、x,p.Sex);Birth=p.Birth;strcpy(HomeAdd,p.HomeAdd);void setID(char id)strcpy(ID,id);void setName(char name)strcpy(Name,name);void setSex(char sex)strcpy(Sex,sex);void setBirth(date birth)Birth=birth;void setHome(char homeadd)strcpy(HomeAdd,homeadd);void print()cout<<"ID= "<<ID<

35、;<",Name= "<<Name<<",Sex= "<<Sex<<","cout<<"Birth= "<<Birth.year<<"-"<<Birth.month<<"-"<<Birth.day<<","cout<<HomeAdd<<endl;int main()date birth;birth

36、.year =1991;birth.month =6;birth.day =12;Person p1("","陳建華","男",birth,"中吳大道1801號(hào)");p1.print ();Person p2;p2.print ();return 0 ;5.5設(shè)計(jì)如下類:1)建立一個(gè)Point類,表示平面中的一個(gè)點(diǎn);建立一個(gè)Line類,表示平面中的一條線端,內(nèi)含兩個(gè)Point類的對(duì)象;建立Triangle類,表示一個(gè)三角形,內(nèi)含三個(gè)Line類的對(duì)象構(gòu)成一個(gè)三角形。2)設(shè)計(jì)三個(gè)類的相應(yīng)的構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù),完成初

37、始化和對(duì)象復(fù)制3)設(shè)計(jì)Triangle類的成員函數(shù)完成三條邊是否能構(gòu)成三角形的檢驗(yàn)和三角形面積計(jì)算,面積顯示。#include <iostream>#include <cmath>const double PI=3.1415;using namespace std;class Pointdouble X,Y;public:Point(double x=0,double y=0)X=x;Y=y;Point(Point& p)X=p.X ; Y=p.Y ;double getx()return X;double gety()return Y;class LinePo

38、int pstart,pend;double length;public:Line(Point p1,Point p2):pstart(p1),pend(p2)setl();Line(Line& l):pstart(l.pstart),pend(l.pend)setl();double getl()return length;void setl()double deltax,deltay;deltax=pstart.getx()-pend.getx();deltay=pstart.gety()-pend.gety();length=sqrt(deltax*deltax+deltay*d

39、eltay);class TrangleLine lfirst,lsecond,lthird;double area;public:Trangle(Line lf,Line ls,Line lt):lfirst(lf),lsecond(ls),lthird(lt)area=0;bool check()double l1,l2,l3;l1=lfirst.getl();l2=lsecond.getl();l3=lthird.getl();return l1<l2+l3 && l2<l1+l3 && l3<l1+l2;void calarea()if

40、 (check()double s;double l1,l2,l3;l1=lfirst.getl();l2=lsecond.getl();l3=lthird.getl();s=(l1+l2+l3)/2.0;area=sqrt(s*(s-l1)*(s-l2)*(s-l3);void print()cout<<"area= "<<area<<endl;int main()Point p1,p2(4,0),p3(0,3);Line l1(p1,p2),l2(p1,p3),l3(p2,p3);Trangle t(l1,l2,l3);if(t.ch

41、eck ()t.calarea();t.print();return 0;5.6建立一個(gè)分?jǐn)?shù)類Fraction。分?jǐn)?shù)類的數(shù)據(jù)成員包括分子和分母。成員函數(shù)包括構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)。構(gòu)造函數(shù)要對(duì)初始化數(shù)據(jù)進(jìn)行必要的檢查(分母不能為0)。將分?jǐn)?shù)顯示成 “a/b”形式的輸出函數(shù)。成員函數(shù)包括約分、通分、加、減、乘、除、求倒數(shù)、比較大小、顯示和輸入。完成以上所有成員函數(shù)并在主函數(shù)中進(jìn)行檢驗(yàn)。#include <iostream>using namespace std;class Fractionint numerator,denominator;int common_divisor();/

42、計(jì)算最大公約數(shù)void contracted();/分?jǐn)?shù)化簡(jiǎn)public: Fraction(int=0,int=1);Fraction(Fraction&);Fraction Add(Fraction);Fraction Sub(Fraction);Fraction Mul(Fraction);Fraction Div(Fraction);bool operator>=(Fraction);bool operator<=(Fraction);bool operator=(Fraction);bool operator<(Fraction f)return !(ope

43、rator>=(f);bool operator>(Fraction f)return !(operator<=(f);bool operator!=(Fraction f)return !(operator=(f);Fraction Updown();void Set(int=0,int=1);void disp()cout<<"fraction= "<<numerator<<"/"<<denominator<<endl;Fraction:Fraction(int num,i

44、nt deno)Set(num, deno);Fraction:Fraction(Fraction& f)numerator=f.numerator;denominator=f.denominator;Fraction Fraction:Add(Fraction f)Fraction Temp(numerator*f.denominator+f.numerator*denominator,denominator*f.denominator);Temp.contracted();return Temp;Fraction Fraction:Sub(Fraction f)Fraction Temp(numerator*f.denominator-f.numerator*denominator,denominato

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論