ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:20.11KB ,
资源ID:16417857      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16417857.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(面向对象程序设计作业题参考答案.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

面向对象程序设计作业题参考答案.docx

1、面向对象程序设计作业题参考答案东北农业大学网络教育学院面向对象程序设计作业题参考答案作业题一答案1. 答:类实际上是对某种类型的对象定义变量和方法的原型。我们可以利用相同种类的对象是相似的事实来为这些对象创建一个蓝图。对对象的软件蓝图叫做类。就象自行车制造商人,自行车的类需要定义一些实例变量来包括当前档位、当前速度等等。这个类需要定义实例方法来提供实施方法,如允许骑车者改变档位、刹车以及改变脚踏板的节奏等。2. 答:对象是一些相关的变量和方法的软件集。软件对象经常用于模仿现实世界中我们身边的一些真实对象。对象是理解面向对象技术的关键。你可以发现现实世界中的对象有两个共同特征:它们都有状态和行为

2、。比如某条狗有自己的状态(比如名字、颜色、生育以及饥饿等等)和行为(比如摇尾巴等等)。同样某辆自行车也有自己的状态(比如当前档位、两个轮子等等)和行为(比如刹车、加速、减速以及改变档位等等)。3答:假设有如下类class Tdatepublic: void Set(int,int,int); int IsLeapYear(); void Print(); private: int month; int day; int year;/” . 运算符”直接访问:Tdate oneday; oneday.Set(2,15,1998);/通过指针访问: Tdate oneday; Tdate *spt

3、r ; sptr=&oneday; sptr- Set(2,15,1998);/通过引用访问: Tdate oneday; Tdate &srel =oneday; srel. Set(2,15,1998);4答:这是个类的友元函数,不属于这个类,但可以访问该类的所有成员,无论这个成 员是私有的还是共有的。(10)行,去掉关键字 friend ;(16)行及其后,改为 float point:distance ( point & a) float dx =X a.X; float dy =Y b.Y; return sqrt (dx * dx +dy * dy);5参考程序/employee.

4、h #ifndef EMPLOYEE#define EMPLOYEE class Employeepublic: Employee(char* n,char* a,char* c,char* s,char* z); void ChangeName(char* n); void Display();protected: char name20; char addr40; char city20; char state20; char zip10; #endif /employee.cpp #include employee.h#include Employee:Employee(char* n,

5、char* a, char* c, char* s, char* z) strncpy(name,n,20); name19=0; strncpy(addr,a,40); addr39=0; strncpy(city,c,20); city19=0; strncpy(state,s,20); state19=0; strncpy(zip,z,10); zip9=0; void Employee:ChangeName(char* n) strncpy(name,n,20); name19=0; void Employee:Display() cout name endl addr city en

6、dl state zip endl; char name20; char addr40; char city20; char state20; char zip10; 作业题二答案1答:# include #include “文件名.扩展名” 两种格式。第一种:编译器根据目录出现的顺序分别查找各路径。第二种:编译器首先在当前目录中查找,然后象前一种方式那样在标准路径下查找。2答:分共有派生、私有派生和保护派生。共有派生中public protected 权限不变,private 变inaccessible .私有派生中 public 变 private ,protected private 变

7、 inaccessible. 保护派生中 public protected 变 protected ,private 变 inaccessible .3. 答: 面向过程的程序设计方法的基本思想是:功能分解、逐步求精。当一些任务十分复杂以至无法描述时,可以将它拆分为一系列较小的功能部件,直到这些自完备的子任务小到易于理解的程度。结构化程序设计成功地为处理复杂问题提供了有力的手段。但是当数据量增大时,数据与处理这些数据的方法之间的分离使程序变得越来越难以理解。而且对数据处理能力的需求越强,这种分离所造成的负作用越显著。面向对象程序设计的本质是把数据和处理数据的过程当成一个整体对象。面向对象程序设

8、计的实现了封装和数据隐藏技术,继承和多态性。使得我可以直接映射问题空间,映射现实世界的层次结构(抽象概念和客观事物等),是程序更易编写和维护,代码的可复用性更强。4答:(2) - (10) (2),(4),(10) (12), meClock (14),yourClock 8:30:00 00:00:005参考程序/employ.h #ifndef EMPLOY#define EMPLOY class Namepublic: Name(char* n); void Display(); void ChangeName(char* n);protected: char firstName20;

9、char lastName20; class Employpublic: Employ(char* n,char* a,char* c,char* s,char* z); void ChangeName(char* n); void Display();protected: Name name; char addr40; char city20; char state20; char zip10; #endif /employ.cpp #include #include employ.h Name:Name(char* n) ChangeName(n); void Name:Display()

10、 cout firstName lastName endl; void Name:ChangeName(char* n) char* p=n; int i; for(i=0; i19; i+) if(*p= |*p=0) break; firstNamei=*p+; firstNamei=0; if(*p=0) lastName0=0; return; while(*p= ) p+; for(i=0; i19; i+) if(*p= |*p=0) break; lastNamei=*p+; lastNamei=0; Employ:Employ(char* n,char* a,char* c,c

11、har* s,char* z) :name(n) strncpy(addr,a,40); addr39=0; strncpy(city,c,20); city19=0; strncpy(state,s,20); state19=0; strncpy(zip,z,10); zip9=0; void Employ:ChangeName(char* n) name.ChangeName(n); void Employ:Display() name.Display(); cout addr city endl state zip Set(2,15,1998);/通过引用访问: Tdate oneday

12、; Tdate &srel =oneday; srel. Set(2,15,1998);3答:类用来描述一类事物,描述这些事物所应具有的属性。类的实例化,即对象。一个类可以有无数个对象。对象可以被创建和销毁,但类是无所不在的。 例如:人是类,你、我、他都是类的实例。 桌子是类,具体的桌子是类的实例。4答:#include class Pointpublic: void Set(double ix,double iy) a=atan2(iy,ix); /接口 r=sqrt(ix*ix+iy*iy; double xOffset() /接口 return r*cos(a); double yOff

13、set() /接口 return r*sin(a); double angle() /接口 return (180/3.14159)*a; double radius() /接口 return r; protected: double a; double r;5参考程序 #include #include class Vectorpublic: Vector(int s=100); Vector(const Vector& v); int& Elem(int ndx); void Display(); void Set(); Vector();protected: int size; int*

14、 buffer; Vector:Vector(int s) buffer=new intsize=s; for(int i=0; isize; i+) bufferi=i*i; Vector:Vector(const Vector& v):size(v.size) buffer = new intsize; for(int i=0; isize; i+) bufferi = v.bufferi; int& Vector:Elem(int ndx) if(ndx=size) cout error in index endl; exit(1); return bufferndx; void Vec

15、tor:Display() for(int j=0; jsize; j+) cout bufferj endl; void Vector:Set() for(int j=0; jsize; j+) bufferj=j+1; Vector:Vector() deletebuffer; void main() Vector a(10); Vector b(a); a.Set(); b.Display(); /运行结果为:12345678910/增加拷贝构造函数后的运行结果为:0149162536496481 作业题四答案1答:C+程序的内存格局通常分为四个区: *全局数据区(data area)

16、*代码区(code area) *栈区(stack area) *堆区(heap area) 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数存放在代码区,为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间被作为堆区。2 答:在C语言中,获得和释放内存的函数是: void *malloc(size _t size); / size_t 即 unsigned long void free(void *); /这两个函数在alloc.h头文件中声明. 在 C+语言中,获得和释放内存的操作符是: new 和 delete /它们不用头文件声明,可以带

17、初始 值表和单元个数. malloc()函数只负责分配指定大小的空间,而不知这块空间用来存放什么类型的变量;而 new不但知道要分配空间的大小,还知道待分配对象的数据类型是什么,因此,如果分配的空间给指定类的对象实例,它能够自动调用该类的构造函数初始化该对象。3答:在默认的拷贝构造函数中,拷贝的策略是逐个成员依次拷贝,这种被称为浅拷贝。但是,一个类可能拥有资源,当其构造函数分配了一个资源(例如某个堆内存地址)的时候,会发生什么?如果拷贝构造函数简单地制作了一个该资源的引用的拷贝,而不对它本身分配,就得面临一个麻烦的局面:两个对象都拥有同一个资源。当对象析构时,该资源将经历两次资源返还。这个时候

18、,我们在执行拷贝时,最好同时对资源本身进行复制,这种拷贝方法,我们称之为深拷贝。4答:#include class complexprivate: float real ; float imag ; public: complex(float r=0,float i=0);void print( );friend complex operator + (complex& c1,complex& c2);friend complex operator - (complex& c1,complex& c2);friend complex operator - (complex& c );compl

19、ex:complex(float r=0,float i=0)real=r; imag=i complex complex:operator + (complex& c1,complex& c2)float r= c1.real + c2.real ;float i= c1.imag + c2.imag ;return complex(r ,i );complex complex:operator - (complex& c1,complex& c2)float r= c1.real - c2.real ;float i= c1.imag - c2.imag ;return complex(r

20、 ,i );complex operator - (complex& c )return complex(-c.real,-c.img);void complex:print( )cout(real,imag)endl;void main()complex x(2.5,3.8),y(4.7,5.4),z;z=x+y; z.print();z=x-y; z.print();z=-x; z.print();5参考程序#include class Boat; class Carpublic: Car(int j) size =j; int Get() return size; protected:

21、int size; class Boatpublic: Boat(int j) size =j; int Get() return size; protected: int size; int Leisure(int time, Car& aobj, Boat& bobj) return time * aobj.Get() * bobj.Get(); void main() Car c1(2); Boat b1(3); int time =4; cout Leisure(time,c1,b1); 作业题五答案1答:一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认的访问。 一个静态

22、成员函数与非静态成员函数的根本区别在于,静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。例如: class Sc public: void nsfn(int a); static void sfn(int a);/ void f (Sc& s) s.nsfn(10);/转化为Sc:nsfn(&s,10) s.sfn(10);/转化为Sc:sfn(10) 2答:编译时就能确定哪个重载函数被调用的,称为先期联编。而在运行时,才能确认调用那个重载函数,称为迟后联编(滞后联编)。 C+中继承机制中用多态性的技术来实现迟后联编。为指明某个成员函数具有多态性,用关键字vir

23、tual来标志其为虚函数。3答:构造函数按照下列的顺序被调用: 1.任何虚拟基类的构造函数按照它们被继承的顺序构造. 2.任何非虚拟基类的构造函数按照它们被继承的顺序构造. 3.任何成员函数的构造函数按照它们声明的顺序调用. 4.类自己的构造函数.4答:class Circle:public Shapepublic:Circle(double r)radius=r;double Area() constreturn 3.1416*radius*radius;private:double radius;class Trapezoid:public Shapepublic:Trapezoid(do

24、uble top,double bottom,double high)T=top;B=bottom;H=high;double Area() constreturn (T+B)*H*0.5;private:double T,B,H;5参考程序#include #include account.h#include savings.h#include checking.h void main() unsigned aN; float val; cout aN val; while(aN) new Savings(aN,val); cout aN val; cout aN val; while(aN) new Checking(aN,val); cout aN val; for(Account* p=Account:First(); p; p=p-Next() cout AccountNo() AcntBalan() Next(); delete t; Account:First()=NULL;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2