04类和对象编程练习.doc_第1页
04类和对象编程练习.doc_第2页
04类和对象编程练习.doc_第3页
04类和对象编程练习.doc_第4页
04类和对象编程练习.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#面向对象程序设计实验指导及报告书姓 名:_学 号:_班 级:_指导教师:_计算机与电子信息工程系2013实验四 类和对象编程练习一、实验目的1. 掌握C#中类的定义、对象的创建方法;1. 理解封装性及其意义;2. 掌握构造函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。3. 能够根据给定的要求定义类并实现类的成员函数;4. 理解类的成员的访问控制的含义,公有、私有和保护成员的区别二、实验内容1. 定义一个学生类,其中有学号、姓名、年龄3个数据成员,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。要求:使用构造函数实现对数据的输入,使用成员函数实现对数据的输出。 调试下列的参考代码。class Studentprivate string id;private string name;private int age;public Student(string id,string name,int age)this.id = id; = name;this.age = age;public void Display()Console.WriteLine(id=0,name=1,age=2,id,name,age);public static void Main()Student s1 = new Student(001,zhangshan,16);s1.Display();Console.ReadKey();以上程序使用了构造方法,请回答(1)构造方法何时被调用?(2)关键字this有何作用?(3)在实例化了s1对象后,如要将s1对象的id改为002,程序将如何修改。2. 实现交通工具Vehicle类版本一:(1)没有数据隐藏的类创建一个Vehicle 类实现上面的UML类图。 a) 含有两个public属性:load “车辆当前的载货量” maxLoad “车辆的最大载货量”。 b) 含有一个公有的构造函数用于初始化最大载货量属性maxLoad。 c) 含有两个公有的函数:public llldouble getLoad(); / 用于得到当前的载货量public double getMaxLoad()/ 用于取得最大载货量(注意:所有的数据都是假定以千克(kilograms)作为单位的。在这个版本的Vehicle类中,你将把所有成员的属性设置为public,这样在下面测试程序TestVehicle1中可以直接访问这些成员。(2)编写下面的程序对Vehicle类进行测试,代码如下: public class TestVehicle1public static void Main(String args)Vehicle vehicle = new Vehicle(10000.0); Console.WriteLine(Add box #1 (500kg); vehicle.load = vehicle.load + 500.0; Console.WriteLine (Add box #2 (250kg); vehicle.load = vehicle.load + 250.0;Console.WriteLine (Add box #3 (5000kg);vehicle.load = vehicle.load + 5000.0;Console.WriteLine (Add box #4 (4000kg);vehicle.load = vehicle.load + 4000.0;Console.WriteLine (Add box #5 (300kg);vehicle.load = vehicle.load + 300.0;Console.WriteLine (Vehicle load is +vehicle.getLoad()+ kgn);应该得到以下的结果: Add box #1 (500kg)Add box #2 (250kg) Add box #3 (5000kg) Add box #4 (4000kg) Add box #5 (300kg) Vehicle load is 10050.0 kg从程序的运行结果来看,你发现了什么问题?思考如何才能避免?版本二:(1)基本数据隐藏 为了解决第一个版本中的问题,你应该隐藏类中的数据成员(load 和 maxLoad) 并且提供一个方法addBox, 来检查车辆是否会发生超载。 创建一个Vehicle 类实现上面的UML类图。 A) 把load和maxLoad属性修改为private(私有的)。B) 添加addBox方法。public boolean addBox(double weight); /参数为所加箱子重量这个方法必须检查加上一个箱子后是否会超过车辆的最大载货量。如果超过了,应该拒绝装载这个箱子并返回false;否则把箱子加到车上并返回true。 注意:所有的数据都是假定以千克(kilograms)作为单位的。(2)编写下面的程序对新版本的Vehicle类进行测试,代码如下: public class TestVehicle2public static void Main(String args)Vehicle vehicle=new Vehicle(10000.0); Console.WriteLine (Add box #1 (500kg):+ vehicle.addBox(500.0); Console.WriteLine (Add box #2 (250kg):+ vehicle.addBox(250.0); Console.WriteLine(Add box #3 (5000kg):+ vehicle.addBox(5000.0); Console.WriteLine(Add box #4 (4000kg):+ vehicle.addBox(4000.0); Console.WriteLine (Add box #5 (300kg):+ vehicle.addBox(300.0); Console.WriteLine (Vehicle load is +vehicle.getLoad()+ kg);阅读并运行下面的测试程序段。注意代码中不能直接修改load属性的值,现在我们可以使用addBox()方法。这个方法将返回true或false并打印到屏幕上。 应该得到以下的结果: Add box #1 (500kg) : trueAdd box #2 (250kg) : trueAdd box #3 (5000kg) : trueAdd box #4 (4000kg) : trueAdd box #5 (300kg) : falseVehicle load is 9750.0 kg 版本三:(1)改变重量的内部表示单位为牛顿 现在假设你将要作一些关于车辆发动机和轮胎等磨损的计算,这些计算使用用牛顿表示的重量。 创建一个Vehicle 类实现上面的UML类图。 修改构造方法,getLoad(), getMaxLoad(), 和addBox() 方法,使它们使用一个从千克到牛顿的相互转换。你可以定义下面的私有方法: private double kiloToNewts(double weight) . private double newtsToKilo(double weight) . 注意vehicle 对象的内部数据是以牛顿为单位的,而外部数据(在方法中传递的参数)还是以千克为单位 。(2)编写下面的程序对新版本的Vehicle3类进行测试,注意它和版本2中的测试代码是相同的,代码如下: public class TestVehicle3public static void Main(String args)Vehicle3 vehicle=new Vehicle3(10000.0); Console.WriteLine (Add box #1 (500kg):+ vehicle.addBox(500.0); Console.WriteLine (Add box #2 (250kg):+ vehicle.addBox(250.0); Console.WriteLine(Add box #3 (5000kg):+ vehicle.addBox(5000.0); Console.WriteLine(Add box #4 (4000kg):+ vehicle.addBox(4000.0); Console.WriteLine (Add box #5 (300kg):+ vehicle.addBox(300.0); Console.WriteLine (Vehicle load is +vehicle.getLoad()+ kg);应该得到以下的结果: Creating a vehicle with a 10,000kg maximum load.Add box #1 (500kg) : trueAdd box #2 (250kg) : trueAdd box #3 (5000kg) : trueAdd box #4 (4000kg) : trueAdd box #5 (300kg) : falseVehicle load is 9750.0 kg 对Vehicle类的第二个和第三个版本采用相同的测试代码,输出的结果有没有发生变化?从代码可维护性的角度谈谈封装的好处。3. 如果已知一个日期为2007/3/8,求10天后是哪一天,367天后呢?设计思路:(1)定义一个MyDate类(版本一),成员有:class MyDate /数据成员private int day;private int month; private int year; /方法成员public MyDate(int y,int m,int d) /构造一个日期 public MyDate DayInc() /返回下一天的日期 public MyDate DayInc(int x) /返回x天后的日期 public void Display () /显示当前日期信息(2)对MyDate类进行测试,测试代码如下:public class TestDatepublic static void Main(String args)MyDate d1 = new MyDate(2007,3,8);MyDate d2;d2 = d1.DayInc(10);d2.Display();d2 = d1.DayInc(367);d2.Display();要求:将MyDate类中的方法代码编写完整,以实现程序所要求的功能。如果将main方法中的语句MyDate d1 = new MyDate(2007,3,8);改为:MyDate d1 = new MyDate(2007,33,58);其它语句不变,程序运行结果是什么?运行结果:(3)修改MyDate类(版本二)要求:必须对生成的日期做合法性验证,设定如下规则A) year : 大于或等于1900年,合法,否则则将year置为1900。B) Month:在1,12范围内合法,否则将month置1。C) Day: 与month有关,应month所在月有效,否则置1。(设计参考:在MyDate类中增加两个方法:)public void SetDate(int d,int m,int y) /设置日期private void CheckDate(int y,int m,int d) /对日期的有效性检查进一步,求两个日期之间的相差的天数,MyDate类又如何改进?(设计参考:在MyDate类中增加公有的方法:)public int DaysBetweenTowDate(MyDate othe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论