[工学]C实验报告附答案
- 格式:doc
- 大小:30.50 KB
- 文档页数:5
[工学]C实验报告附答案
《面向对象程序设计C#》实验指导及报告书/学年第学期姓名:______________学号:______________班级:______________指导教师:______________计算机科学与工程学院龄3个数据成员,以及若干成员函数。
同时编写主函数使用这个类,实现对学生数据的赋值和输出。
要求:使用构造函数实现对数据的输入,使用成员函数实现对数据的输出。
调试下列的参考代码。
classStudent{privatestringid;privatestringname;privateintage;publicStudent(stringid,stringname,intage){this.id=id;=name;this.age=age;}publicvoidDisplay(){Console.WriteLine(“id={0},name={1},age={2}“,id,name,age);}publicstaticvoidMain(){Students1=newStudent(“001“,“zhangshan“,16);s1.Display();Console.ReadKey();}}以上程序使用了构造方法,请回答(1)构造方法何时被调用?(2)关键字this有何作用?(3)在实例化了s1对象后,如要将s1对象的id改为“002“,程序将如何修改。
2.如果已知一个日期为,则year置为1900,否则year合法。
month不在有效范围内则month置1,day应当月有效,否则置1。
(提示在MyDate类中增加两个方法:)publicvoidSetDate(intd,intm,inty){…}//设置日期privateboolCheckDate(inty,intm,intd){…}//对日期的有效性检查进一步,求两个日期之间的相差的天数,Date类如何改进?3.设计一个数学中的分数类(Fraction),并测试结果是否正确。
要求:(1)一个分数由分子和分母构成(2)生成的分数对象的分子和分母必须满足的条件:A、分母不为零B、分子和分母既约(化简后最大公约数只能为1)C、分子和分母异号时分子为负(3)分数对象之间能够四则运算,分数与整数之间也能够完成四则运算(4)分数对象之间能够比较大小,分数与整数之间也能够比较大小(5)一个分数的对象能够转化为小数形式程序代码:测试分数类Fraction,写出测试代码,所用测试数据和运行结果1)测试代码2)所用测试数据3)程序运行结果:四、实验小结六、教师评分实验预习20%实验过程20%实验结果30%实验报告30%总成绩实验五继承与多态编程练习一、实验目的1.理解继承的含义,掌握派生类的定义方法和实现;2.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。
3.编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序;4.编写体现类多态性(成员方法重载,构造方法重载)的程序。
二、预习内容1.什么叫继承?继承的优点是什么?2.什么是多态?多态的优点是什么?三、实验内容1.创建一个形状类Shape,作为各种形状的基类,然后用继承来创建Circle类、Rectangle类和Square类,通过继承形成一个清晰的类层次结构。 (1)创建Shape类,在该类中定义属性name表示形状的名称,定义虚方法CalcPerimeter()和CalcArea()分别用于计算形状的周长和面积、虚方法Show()用于显示形状的所有属性的信息,在基类中Show()方法打印“形状尚未定义”信息。
(2)创建Circle类,它从Shape类派生,在该类中增加属性radius表示半径,定义构造方法对radius属性及从基类继承的属性初始化,对继承自基类的虚方法CalcPerimeter()和CalcArea()进行重写以实现对圆周长和面积的计算;重写虚方法Show(),输出圆的所有属性信息。
(3)创建Rectangle类,它从Shape类派生,在该类中增加属性length和width表示长和宽,定义构造函数完成所有(自身的和继承来的)属性的初始化,对从基类继承的虚方法进行重写实现对矩形周长和面积的计算。
重写虚方法Show(),输出矩形的所有属性信息。
(4)创建Square类(正方形),它从Rectangle类派生,除长、宽相等外其它与Rectangle相同。
用UML图表示出上述四个类的联系图:编写以上各个类之后,用如下测试程序,验证设计的类的正确性classShapeTest{staticvoidMain(string[]args){Circlec1=newCircle(“circle“,5);c1.Show();Rectangler1=newRectangle(“rectangle“,3,5);r1.Show();Squares1=newSquare(“Square“,5);s1.Show();Console.ReadKey();}}程序应该输出的结果:测试代码如果改为如下的写法,输出的结果又是什么?classShapeTest{staticvoidMain(string[]args){Shape[]shapes=newShape[4];shapes[0]=newCircle(“circle“,6);shapes[1]=newRectangle(“rectangle1“,2,8);shapes[2]=newRectangle(“rectangle2“,4,7);shapes[3]=newSquare(“square“,9);for(inti=0;i如果将基类中虚方法Show()关键字virtual去掉程序运行结果会怎样?(2)将类Shape定义为抽象类,把Show()方法定义为抽象方法(abstract)后,Shape是否可以实例化对象。
(3)将Shape类的Show()方法定义为抽象方法后,再运行上述测试程序,查看效果,并回答抽象方法是否可以含{}主体?2.创建一个BankAccount类,作为各种账户的基类。
然后用继承来创建两个专用的账户类:SavingAccount(储蓄账户)类和CheckingAccount(支票账户)类。
(1)创建BankAccount类,它拥有下列成员类成员描述owner账户所有者(私有字段)ID账户号码(公有属性),ID就取owner名balance账户余额(私有字段)Balance账户余额(只读公有属性),用有读取balance的值构造方法带一个参数,为owner赋初值,balance赋初值为0Deposit存款方法Withdraw取款方法BankAccount类的代码:(2)创建SavingAccount类,该类从BankAccount派生新特征:A.储蓄账户能获得利息,附加一个属性Interest表示利率.B.着时间的推移,储蓄账户可以获得利息,所以为SavingAccount类增加一个AddInterest()方法,用于把利息增加到原balance基础上。
利息的计算规则为interest*balance;C.同一人可同时拥有不同类型的账户,用ID属性来表示不同账户类型,ID=owner+”-S”(提示:将基类的ID加上virtual关键字,在子类中根据需要重写)。
SavingAccount类的代码:(3)创建CheckingAccount类,该类从BankAccount派生新特征:A.取款操作需收取0.25元的手续费外,其它部分与BankAccount相同(提示:在子类CheckingAccount中重写从基类继承的Withdraw方法。
)B.ID属性代表账户类型,ID=owner+”-C”CheckingAccount类的代码:(4)编写测试代码:classTestAccount{publicstaticvoidMain(){SavingAccounts1=newSavingAccount(“Tom”);s1.Deposit(150M);s1.Withdraw(50M);s1.Interest=0.05M;s1.AddInterest();Console.WriteLine(“{0}:{1:c}”,s1.ID,s1.Balance);CheckingAccountc1=newCheckingAcount(“Yorck”);c1.Deposit(150M);c1.Withdraw(50M);Console.WriteLine(“{0}:{1:c}”,c1.ID,c1.Balance);}}运行结果:(5)多态地使用派生类classTestAccount{publicstaticvoidOperateAcc(BankAccountaccount){account.Deposit(150M);account.Withdraw(50M);Console.WriteLine(“{0}:{1:c}”,account.ID,account.Balance);}publicstaticvoidMain(){SavingAccounts1=newSavingAccount(“Tom”);s1.Interest=0.05M;s1.AddInterest();OperateAcc(s1);CheckingAccountc1=newCheckingAcount(“Yorck”);OperateAcc(c1);}}比较(5)和(4)代码写法,谈谈你对多态的理解?四、实验小结五、教师评分实验预习20%实验过程20%实验结