C#面向对象程序设计续-继承.doc_第1页
C#面向对象程序设计续-继承.doc_第2页
C#面向对象程序设计续-继承.doc_第3页
C#面向对象程序设计续-继承.doc_第4页
C#面向对象程序设计续-继承.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

实验三 C#面向对象程序设计续-继承一、实验目的1 掌握面向对象程序设计继承与派生机制的概念;2 深入理解面向对象程序设计关于多态性的概念与特征;3 掌握泛型编程设计方法。二、实验内容(实验过程中编写的程序复制到本文件中,要求输出显示部分截图复制到本文件中,下课整理后上交)1 基于C#中继承和多态性的相关概念解决:定义一个Shape抽象类,在此基础上派生出两个抽象类TwoDimensionalShape和ThreeDimensionalShape类。TwoDimensionalShape类再派生Rectangle和Cirlce类。ThreeDimensionalShape类再派生Sphere和Cube类。TwoDimensionalShape只有抽象方法Area()计算二维图形面积;ThreeDimensionalShape只有抽象方法Area()计算三维图形表面积,抽象方法Volume()计算三维图形体积。创建一个程序,用Shape引用的数组保存层次中每个具体类的对象。程序输出,描述每个数组元素所指的对象。另外,在处理数组所有图形的循环中,要确定每个图形是TwoDimensionalShape还是ThreeDimensionalShape。如果是TwoDimensionalShape则显示面积,如果是ThreeDimensionalShape,则显示表面积和体积。输出类似:图形1是xxx,面积是yyy图形2是xxx,面积是yyy图形3是xxx,表面积是yyy,体积是zzz图形4是xxx,表面积是yyy,体积是zzz代码:using System;namespace _127 abstract public class Shape public const double PI = Math.PI; abstract public double Area(); abstract public double Volume(); abstract public class TwoDimensionalShape : Shape protected double x, y; public TwoDimensionalShape(double x1, double y1) x = x1; y = y1; public class Rectangle : TwoDimensionalShape public Rectangle(double x, double y) : base(x, y) public override double Area() return x * y; public override double Volume() return 0; public class Cirlce : TwoDimensionalShape public Cirlce(double r) : base(r, 0) public override double Area() return PI * x * x; public override double Volume() return 0; abstract public class ThreeDimensionalShape : Shape protected double x, y, z; public ThreeDimensionalShape(double x1, double y1, double z1) x = x1; y = y1; z = z1; public class Sphere : ThreeDimensionalShape public Sphere(double r1) : base(r1, 0, 0) public override double Area() return 4 * PI * x * x; public override double Volume() return 4 * PI * x * x * x / 3; public class Cube : ThreeDimensionalShape public Cube(double a, double b, double c) : base(a, b, c) public override double Area() return 2 * x * y + 2 * x * z + 2 * y * z; public override double Volume() return x * y * z; class Program static void Main(string args) Shape rectangle = new Rectangle(1, 2); Shape cirlce = new Cirlce(1); ThreeDimensionalShape sphere1 = new Sphere1); ThreeDimensionalShape sphere2 = new Sphere(1); ThreeDimensionalShape cube1 = new Cube(1, 2, 3); ThreeDimensionalShape cube2 = new Cube(1, 2, 3); Console.WriteLine(图形1是圆形t面积:0, rectangle.Area(); Console.WriteLine(图形2是长方形t面积:0, cirlce.Area(); Console.WriteLine(图形3是球体t表面积:0t体积:1, sphere1.Area(), sphere2.Volume(); Console.WriteLine(图形4是长方体t表面积:0t体积y:1, cube1.Area(), cube2.Volume(); 运行结果:2.完成P157习题10,将学生写成类,利用IComparable接口或IComparer接口,利用动态数组ArrayList中的函数进行排序。代码:using System;using System.Collections;namespace _127 class Program class Stud int xh; /学号 string xm; /姓名 int mathfs; /数学分数 int englishfs; /英语分数 int sum; /总分 public int pxh get return xh; public string pxm get return xm; public int psum() return sum = mathfs + englishfs; public Stud(int no, string name, int mdegree,int edegree) xh = no; xm = name; mathfs = mdegree; englishfs = edegree; public void disp() Console.WriteLine(t0t1tt2tt3t 4, xh, xm, mathfs,englishfs,psum(); public class myCompareClassxh : IComparer int IComparer.Compare(object x, object y) Stud a = (Stud)x; Stud b = (Stud)y; if (a.pxh b.pxh) return 1; else if (a.pxh = b.pxh) return 0; else return -1; public class myCompareClassxm : IComparer int IComparer.Compare(object x, object y) Stud a = (Stud)x; Stud b = (Stud)y; return String.Compare(a.pxm, b.pxm); public class myCompareClasssum : IComparer int IComparer.Compare(object x, object y) Stud a = (Stud)x; Stud b = (Stud)y; if (a.psum() b.psum() return 1; else if (a.psum() = b.psum() return 0; else return -1; static void disparr(ArrayList myarr, string str) Console.WriteLine(str); Console.WriteLine(t学号t姓名t 数学分数 英语分数 总分); foreach (Stud s in myarr) s.disp(); static void Main(string args) int i, n = 4; IComparer myComparerxh = new myCompareClassxh(); IComparer myComparerxm = new myCompareClassxm(); IComparer myComparersum = new myCompareClasssum(); ArrayList myarr = new ArrayList(); Stud st = new Stud4 new Stud(1, Smith, 82,87), new Stud(4, John, 88,78), new Stud(3, Mary, 95,90), new Stud(2, Cherr, 64,70) ; for (i = 0; i n; i+) myarr.Add(sti); disparr(myarr, 排序前: ); myarr.Sort(myComparerxh); disparr(myarr, 按学号升序排序后: ); myarr.Sort(myComparerxm); disparr(myarr, 按姓名词典次序排序后:); myarr.Sort(myComparersum ); disparr(myarr, 按总分降序排序后: ); 运行结果:3.利用泛型编程思想,模仿例7.14,写一个队列类MyQueue,实现元素的先进先出操作。P155代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace proj_127 class Queue T data; int front; int rear; public Queue() data = new T10; front = 0; rear = 0; public bool QueueEmpty() return front = rear; public void push(T e) datarear = e; rear+; public void pop(ref T e) e = datafront; front+; class Program static void Main(string args) int e = 0; Queue s = new Queue(); s.push(1); s.push(2); s.push(3); Console.Write(整数栈出栈次序: ); while (!s.QueueEmpty() s.po

温馨提示

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

评论

0/150

提交评论