类和对象一.docx
- 文档编号:29816335
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:14
- 大小:18.43KB
类和对象一.docx
《类和对象一.docx》由会员分享,可在线阅读,更多相关《类和对象一.docx(14页珍藏版)》请在冰豆网上搜索。
类和对象一
1.C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是(D)
A.增加了一些新的运算符
B.允许函数重载,并允许设置缺省参数
C.规定函数说明符必须用原型
D.引进了类和对象的概念
2.对于结构中定义的成员,其默认的访问权限为(C)。
A.publicB.protectedC.privateD.static
3.为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为(A)。
A.publicB.protectedC.privateD.static
4.下列有关类的说法不正确的是(C)。
A.对象是类的一个实例
B.任何一个对象只能属于一个具体的类
C.一个类只能有一个对象
D.类与对象的关系和数据类型与变量的关系相似
5.下列表达方式正确的是(D)。
A.classP{B.classP{
public:
public:
intx=15;intx;
voidshow(){cout< };} C.classP{D.classP{ intf;public: };inta; f=25;voidSeta(intx){a=x;} 分析: 在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。 二.改错题 1.#include classPoint{ public: voidSet(doubleix,doubleiy)//设置坐标 {x=ix;y=iy;} doublexOffset()//取x轴坐标分量 {returnx;} doubleyOffset()//取y轴坐标分量 {returny;} doubleangle()//取点的极坐标θ {return(180/3.14159)*atan2(y,x);} doubleradius()//取点的极坐标半径 {returnsqrt(x*x+y*y);} protected: doublex;//x轴分量 doubley;//y轴分量 }//error: 缺少分号 voidmain() {Pointp; doublex,y; cout<<"Enterxandy: \n"; cin>>x>>y; p.Set(x,y); p.x+=5;//error: 私有成员不能在类外被访问 p.y+=6;//error: 同上 cout<<"angle="< <<",radius="< <<",xoffset="< <<",yoffset="< 2.分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。 #include classone {inta1,a2; public: one(intx1=0,x2=0); }; voidmain() {onedata(2,3); cout< cout< 分析: 出错原因: 构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。 改正后的程序如下: #include classone {inta1,a2; public: one(intx1=0,intx2=0){a1=x1;a2=x2;} intgeta1(){returna1;} intgeta2(){returna2;} }; voidmain() {onedata(2,3); cout< cout< } 3.分析以下程序的错误原因,给出修改方案使之能正确运行。 #include classAmplifier{ floatinvol,outvol; public: Amplifier(floatvin,floatvout) {invol=vin;outvol=vout;} floatgain(); }; Amplifier: : floatgain(){returnoutvol/invol;} voidmain() {Amplifieramp(5.0,10.0); cout<<"\n\nThegainis=>"< } 分析: 成员函数在类体外定义格式是: 函数返回类型类名: : 成员函数名(参数表);成员函数调用格式是: 对象名.成员函数名(参数表)。 改正后的程序如下: #include classAmplifier {floatinvol,outvol; public: Amplifier(floatvin,floatvout){invol=vin;outvol=vout;} floatgain(); }; floatAmplifier: : gain(){returnoutvol/invol;} voidmain() {Amplifieramp(5.0,10.0); cout<<"\n\nThegainis=>"< } 三.编程题 (1)定义盒子Box类,要求具有以下成员: 可设置盒子形状;可计算盒子体积;可计算盒子的表面积。 #include classBox {intx,y,z;intv,s; public: voidinit(intx1,inty1,intz1){x=x1;y=y1;z=z1;} voidvolue(){v=x*y*z;} voidarea(){s=2*(x*y+x*z+y*z);} voidshow() {cout<<"x="< cout<<"s="< }; voidmain() {Boxa; a.init(2,3,4); a.volue(); a.area(); a.show(); } (2)定义计数器类Counter。 要求具有以下成员: 计数器值;可进行增值和减值记数;可提供记数值。 #include classCounter {intn; public: voidinit_Counter(intm){n=m;} voidin_Counter(){n++;} voidde_Counter(){n--;} voidshow(){cout< }; voidmain() {Countera; a.init_Counter(10); a.show(); a.de_Counter(); cout< } (3)定义一个时间类Time,能提供和设置由时、分、秒组成的时间,并编出应用程序,定义时间对象,设置时间,输出该对象提供的时间。 //time.h #include"time.h" classTime{ public: voidSet(inth,intm,ints); voidDisplay(); protected(private): inthour; intminute; intsecond; }; //time.cpp #include"time.h" #include voidTime: : Set(inth,intm,ints) { h%=24;m%=60;s%=60;//简单正确性处理 hour=h;minute=m;second=s; } voidTime: : Display() {cout< "< "< //主程序 voidmain() { Timea; a.Set(3,32,48); a.Display();} (4)编写一个程序,设计一个Tdate类,它应该满足下面的条件: 1)用这样的格式输出日期: 日-月-年; 2)判断该年是否为闰年; 3)设置日期。 //tdate.h classTdate {pubilc: voidset(intm,intd,inty); intIsleapyear(); voidprint(); private: intmonth,day,year; }; •//tdate.cpp •#include •#include“tdate.h” •voidTdate: : set(intm,intd,inty) •{month=m;day=d;year=y;} •intTdate: : Isleapyear() •{return(year%4==0&&year%100! =0)||(year%400==0);} •voidTdate: : print() •{cout< •#include •#include“tdate.h” •voidmain() •{Tdates; •s.set(2,15,1998); •s.print(); •if(s.Isleapyear()) •cout<<"今年为闰年"< •else cout<<"今年不是闰年"< (5)定义一个满足如下要求的类Date 用下面的格式输出日期日/月/年 在运行的日期上加一天 设置日期 #include classDate{ public: voidDisplay(); voidAddOneDay(); voidSetDay(inty,intm,intd); boolLegal(inty,intm,intd); boolIsLeapYear(inty); protected: intyear,month,day; }; voidDate: : Display() {cout< voidDate: : AddOneDay() {if(Legal(year,month,day+1)) day++; elseif(Legal(year,month+1,1)) month++,day=1; elseif(Legal(year+1,1,1)) day=1,month=1,year++;} voidDate: : SetDay(inty,intm,intd) {if(Legal(y,m,d)) day=d,month=m,year=y; } boolDate: : Legal(inty,intm,intd) {if(y>9999||y<1||d<1||m<1||m>12) returnfalse; intdayLimit=31; switch(m)case4: case6: case9: case11: dayLimit--; if(m==2)dayLimit=IsLeapYear(y)? 29: 28; return(d>dayLimit)? false: true;} boolDate: : IsLeapYear(inty) {return(year%4==0&&year%100! =0)||(year%400==0);} voidmain() {Datea; a.SetDay(2008,2,28); a.AddOneDay(); a.Display();} 四、 (1).请检查下面程序,找出其中的错误(先不要上机,在纸面上作人工检查),并改正之。 然后上机调试,使之能正常运行。 运行时从键盘输入时、分、秒的值,检查输出是否正确。 #include usingnamespacestd; classTime {voidset_time(); voidshow_time(); inthour; intminute; intsec; }; Timet; intmain() {set_time(); show_time();} intset_time() {cin>>t.hour; cin>>t.minute; cin>>t.sec;} intshow_time() {cout< ″< ″< (2)改写本章例2.1程序,要求: (1)将数据成员改为私有的; (2)将输入和输出的功能改为由成员函数实现; (3)在类体内定义成员函数。 #include usingnamespacestd; classTime {public: voidset_time(void) {cin>>hour; cin>>minute; cin>>sec;} voidshow_time(void) {cout< "< "< private: inthour; intminute; intsec; }; Timet; intmain() {t.set_time(); t.show_time();return0;} (3)在第2题的基础上进行如下修改: 在类体内声明成员函数,而在类外定义成员函数。 #include usingnamespacestd; classTime {public: voidset_time(void); voidshow_time(void); private: inthour; intminute; intsec; }; voidTime: : set_time(void) {cin>>hour; cin>>minute; cin>>sec; } voidTime: : show_time(void) {cout< "< "< Timet; intmain() {t.set_time(); t.show_time(); return0; } 2定义一个学生类stident,此类中包括三个数据成员分别为姓名、年龄、性别,包括2个成员函数分别为set_value,它是对数据成员进行赋值运算,另一个函数为display,它是显示出三个数据成员的值 classStudent {public: voiddisplay(); voidset_value(); private: intnum; charname[20]; charsex; }; #include"1.h"/在此文件中进行函数的定义 #include usingnamespacestd;//不要漏写此行 voidStudent: : display() {cout<<"num: "< cout<<"name: "< cout<<"sex: "< } voidStudent: : set_value() {cin>>num; cin>>name; cin>>sex; } #include usingnamespacestd; #include"1.h" intmain() {Studentstud; stud.set_value(); stud.display(); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象