下面是小编为大家整理的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面向对象程序设计续继承 面向对象程序设计中的继承