欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    c++类与对象练习题.doc

    • 资源ID:53848130       资源大小:56.51KB        全文页数:17页
    • 资源格式: DOC        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c++类与对象练习题.doc

    1 概念填空题1.1 类定义的关键字是 class 。类的数据成员通常指定为 私有 成员。类的函数成员通常指定为 公有 成员,指定为 公有 的类成员可以在类对象所在域中的任何位置访问它们,类的 私有和保护 只能被该类的成员函数或友元函数访问。1.2类的访问限定符包括 public、 private 和 protected 。类成员默认的访问方式是 private 。访问限定符在类中 无 先后次序,各限定符 允许 (允许/不允许)多次出现。1.3 构造函数的任务是 建立对象 。类中可以有 多 个构造函数,它们由 参数 区分。如果类说明中没有给出构造函数,则C+编译器会提供构造函数,该函数 不完成 (完成/不完成)对象初始化工作。1.4复制构造函数的参数是 对象的复制 ,当程序没有给出复制构造函数时,编译系统会提供 默认复制构造函数 ,完成类对象的 复制 。复制构造函数被调用情况有 3 种。1.5析构函数在对象 释放 时被自动调用。类中没有定义析构函数时,编译系统会提供一个默认的析构函数。该函数 不完成 (完成/不完成)具体对象的清理工作。2. 简答题2.1 为什么说类与对象的概念是客观世界的反映?2.2 简单解释什么是面向对象程序设计的封装性。2.3 引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为引用?为什么返回值为引用的函数可以作为左值?2.4 什么是默认的构造函数?默认的构造函数可以有多少个?2.5 复制构造函数用于哪3个方面?2.6 为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符”.”再加对象成员名?2.7 类的静态数据成员与函数中的静态成员有何异同?2.8 类的成员函数在什么情况下应该定义为私有的?这样做的目的是什么?2.9 友元关系有何性质?友元关系的优点和缺点各有哪些?3.选择题3.1 数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是( B )。A类 B对象 C函数体 D数据块3.2 类的实例化是指( B )。A定义类B创建类的对象C指明具体类D调用类的成员3.3下列说法中正确的是( B )。A类定义中只能说明函数成员的函数头,不能定义函数体 B类中的函数成员可以在类体中定义,也可以在类体之外定义 C类中的函数成员在类体之外定义时必须要与类声明在同一文件中 D在类体之外定义的函数成员不能操作该类的私有数据成员3.4有如下类定义:class sample int n;public:sample (int i=0):n(i) void setValue(int n0);;下列关于setValue成员函数的实现中,正确的是( B )。Asample:setValue(int n0)n=n0;Bvoid sample:setValue(int n0)n=n0;Cvoid setValue(int n0)n=n0;DsetValue(int n0)n=n0;3.5在下面的类定义中,错误的语句是( C )。class sample public: sample(int val);/ sample( ); / private:int a=2.5; / public:sample( ); /; ABCD3.6类的构造函数被自动调用执行的情况是在创建该类的(C)。 A成员函数时 B数据成员时 C对象时 D友元函数时3.7(A)是析构函数的特征。 A一个类中只能定义一个析构函数 B析构函数名与类名不同 C析构函数的定义只能在类体内 D析构函数可以有一个或多个参数3.8 在下列函数原型中,可以作为类AA构造函数的是( D )。 Avoid AA(int); Bint AA( ); CAA(int) const; DAA(int)3.9关于成员函数特征的下述描述中,(A)是错误的。 A成员函数一定是内联函数 B成员函数可以重载 C成员函数可以设置参数的默认值 D成员函数可以是静态的3.10不属于成员函数的是(B )。 A静态成员函数 B友元函数 C构造函数 D析构函数3.11已知类A是类B的友元,类B是类C的友元,则(d )。 A类A一定是类C的友元 B类C一定是类A的友元 C类C的成员函数可以访问类B的对象的任何成员 D类A的成员函数可以访问类B的对象的任何成员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; /常函数不能修改成员friend void show(AA aa) const cout<<a; /友元函数不能是常函数;其中的四个函数定义中正确的是(B)。A BCD3.13有如下类定义:class Testpublic:Test( )a=0;c=0;/常成员必须在初始化列表中初始化int f(int a) const this->a=a;/常函数不能修改成员void h(int b) Test:b=b;/static int g( ) return a;/静态函数要通过对象访问成员private:int a;static int b;const int c;int Test:b=0;在标注号码的行中,能被正确编译的是(C)。A B C D4写出程序程序执行结果。4.1#include<iostream>using namespace std;class Test public:Test( ) 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( ) const 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<<my1.number<<endl; 5my1.set(number);cout<<my1.number<<endl; 10my1.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 val+;void Test:sfunc(Test &r)r.a=125;cout<<"Result3="<<r.a<<endl;void main( )cout<<"Result1="<<Test:func( )<<endl; 200Test a;cout<<"Result2="<<a.func()<<endl; 201a.sfunc(a); 125Result1=200Result2=201Result1=1255.编程题5.1 构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月用枚举类型,并完成测试(包括用成员函数和用普通函数)。#include <iostream.h>#include <conio.h>#include <iomanip.h>enum YRY2000,Y2001,Y2002,Y2003,Y2004,Y2005;/枚举名必须是标识符enum MTJan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec;class Timedateprivate:YR year;MT 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 &);/体会用引用的优点,一次可返回3个值void gettime(int &,int &,int &);void putdate(YR ,MT ,int );void puttime(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 Timedate:list()/成员函数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;case 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;case May:cout<<'/'<<"May"break;case Jun:cout<<'/'<<"Jun"break;case Jul:cout<<'/'<<"Jul"break;case Aug:cout<<'/'<<"Aug"break;case Sep:cout<<'/'<<"Sep"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<<':'<<mm<<':'<<ss<<endl;void show(Timedate &td)/普通函数,体会两者的不同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:cout<<"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:cout<<'/'<<"Feb"break;case Mar:cout<<'/'<<"Mar"break;case Apr:cout<<'/'<<"Apr"break;case May:cout<<'/'<<"May"break;case Jun:cout<<'/'<<"Jun"break;case Jul:cout<<'/'<<"Jul"break;case Aug:cout<<'/'<<"Aug"break;case Sep:cout<<'/'<<"Sep"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<<':'<<mm<<':'<<ss<<endl;int main(int argc, char* argv)Timedate A(Y2004,Mar,3),B;A.list();B.list();B.putdate(Y2005,Oct,18);B.puttime(17,30,00);B.list();show(B);return 0;5.2 定义一个日期类Date,具有年月日等数据成员,显示日期、加减天数等函数成员。注意需要考虑闰年。#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);void 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;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=daysmonth;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=days-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 定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,默认值为0,周长和面积在构造函数中生成)和复制构造函数。#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 ;area=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 设计一个学校在册人员类(Person)。数据成员包括身份证号(IdPerson)、姓名(Name)、性别(Sex)、生日(Birth-day)和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示,还包括构造函数与复制构造函数。设计一个合适的初始值。#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;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(Sex,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<<",Name= "<<Name<<",Sex= "<<Sex<<","cout<<"Birth= "<<Birth.year<<"-"<<Birth.month<<"-"<<Birth.day<<","cout<<HomeAdd<<endl;int main()date birth;birth.year =1991;birth.month =6;birth.day =12;Person p1("08124401","陈建华","男",birth,"中吴大道1801号");p1.print ();Person p2;p2.print ();return 0 ;5.5设计如下类:1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。#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 LinePoint 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*deltay);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 (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.check ()t.calarea();t.print();return 0;5.6建立一个分数类Fraction。分数类的数据成员包括分子和分母。成员函数包括构造函数、复制构造函数。构造函数要对初始化数据进行必要的检查(分母不能为0)。将分数显示成 “a/b”形式的输出函数。成员函数包括约分、通分、加、减、乘、除、求倒数、比较大小、显示和输入。完成以上所有成员函数并在主函数中进行检验。#include <iostream>using namespace std;class Fractionint numerator,denominator;int common_divisor();/计算最大公约数void contracted();/分数化简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 !(operator>=(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,int 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,denominator*f.denominator);Temp.contracted();return Temp;Fraction Fraction:Mul(Fraction f)Fraction Temp(numerator*f.numerator,denominator*f.denominator);Temp.contracted();return Temp;Fraction Fraction:Div(Fraction f)Fraction Temp(f.denominator,f.numerator );Temp=Mul(Temp);Temp.contracted();return Temp;int Fraction:common_divisor()int residue;int dividend=numerator,divisor=denominator; while(residue=dividend%divisor)dividend=divisor;divisor=residue;return divisor;void Fraction:contracted()int residue=common_divisor();numerator/=residue;denominator/=residue;if(denominator<0)numerator*=-1;denominator*=-1;bool Fraction:operator>=(Fraction f)Fraction Temp=Sub(f);return (Temp.numerator >=0);bool Fraction:operator<=(Fraction f)Fraction Temp=Sub(f);return (Temp.numerator <=0);bool Fraction:operator=(Fraction f)Fraction Temp=Sub(f);return (Temp.numerator =0);Fraction Fraction:Updown()int p;Fraction Temp;if (numerator!=0)p=numerator;numerator=denominator;denominator=p;Temp.numerator=numerator;Temp.denomina

    注意事项

    本文(c++类与对象练习题.doc)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开