C面向对象程序设计续继承(2022年)

下面是小编为大家整理的C面向对象程序设计续继承(2022年),供大家参考。

C面向对象程序设计续继承(2022年)

 

 实验三 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 表面积:{0}\t体积:{1}", sphere1.Area(), sphere2.Volume());

 Console.WriteLine(" 图形 4 是长方体 \t 表面积 :{0}\t 体积 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("\t{0}\t{1}\t\t{2}\t\t{3}\t {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 Stud[4] { 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(st[i]);

 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>

 {

 T[] data; int front; int rear;

 public Queue()

 {

 data = new T[10]; front = 0;

 rear = 0;

 }

 public bool QueueEmpty()

 {

 return front == rear;

 }

 public void push(T e) {

 data[rear] = e; rear++;

 }

 public void pop(ref T e) {

 e = data[front]; front++;

 }

 }

 class Program

 {

 static void Main(string[] args) {

 int e = 0; Queue<int> s = new Queue<int>(); s.push(1); s.push(2);

 s.push(3);

 Console.Write(" 整数栈出栈次序 : "); while (!s.QueueEmpty()) {

 s.pop(ref e); Console.Write("{0} ", e);

 }

 Console.WriteLine(); string e1 = ""; Queue<string> s1 = new Queue<string>(); s1.push("marry");

 s1.push("john");

 s1.push("simth");

 Console.Write(" 字符串栈出栈次序 : "); while (!s1.QueueEmpty()) {

 s1.pop(ref e1); Console.Write("{0} ", e1);

 }

 Console.WriteLine(); }

 }

 }

 运行结果:

推荐访问:程序设计 面向对象 继承 C面向对象程序设计续继承 面向对象程序设计中的继承