您的当前位置:首页实验二面向对象的程序设计

实验二面向对象的程序设计

2024-02-07 来源:小侦探旅游网


* *

实验二 面向对象的程序设计

(2课时)

一、 实验目的

1 )熟悉类的定义和使用。 2) 掌握创建对象的方法。 3) 掌握只读字段的声明及使用。 4) 学习定义和使用带参数构造函数。 5) 熟悉访问权限控制符。 6) 掌握属性的定义和使用。 7) 掌握关键字this。

8) 理解继承的概念,学会定义和使用派生类。 9) 学会定义和使用接口。

10) 掌握继承过程中的方法重写,区分它与方法隐藏、方法重载的不同。 11) 掌握多态。 12) 熟悉关键字base。 二、 实验要求

1) 程序结构清晰、语句完整,包含有头文件和 2) 格式正确,语句采用缩进格式; 3) 设计子函数实现题目要求的功能; 4) 编译、连接通过,熟练使用命令键;

5) 运行结果正确,输入输出有提示,格式美观。 三、 实验设备、材料和工具

main函数;

* *

1)奔腾2计算机或以上机型 2) C#.NET2008 四、实验内容和步骤 实验内容:

1、创建一个描述图书信息的类并测试。类中应保存有图书的书号、标题、作者、出版社、价格 等信息。 步骤:

1) 定义图书类 Book, Book类中包含isbn(书号)、title (标题)、author(作者)、press (出版

社)、price (价格)等私有字段。由于对一本书来说,书号是唯一的,因此, 明为只读的。

2) 为Book类中的每个字段定义相应的属性,由于

的。

3) 为Book类定义两个构造函数,其中,一个构造函数将所有字段都初始化为用户指定的值, 另一个构

造函数只要求用户指定有关书号的信息,它将调用上一个构造函数初始化对象,初 始化时,价格取0,除书号的其他信息取“未知”。

4) 为Book类定义方法Show,Show方法用于显示图书的所有信息。 5) 编写Main方法测试Book类,Main方法中分别使用上述两个构造函数创建

Book对象。

isbn字段只读的,其相应属性也应该是只 读

isbn字段应声

2、根据几何图形的组合与继承关系定义用于描述点、直线、三角形、四边形、正方形、圆等几何图 形的类(或结构)。要求首先定义一个几何图形接口描述所有几何图形的共有特性,上述几何图形都 必须现实该接口,并且其中用于描述点的类型最好定义为结构。 步骤:

1)定义几何图形接口 Shape。 Shape接口中包含属性 Color,用于读取和设置几何图形的颜色; 包含方法

Draw、Erase、Move,用于绘制、擦拭、移动几何图形。由于属性

法用基本数据类型准确描述,程序中还需要另外定义一个表示颜色的枚举类型

Color的类型无 CColor (实验

* *

上, .NET框架类库中定义有一个 Color结构,它可以更好地表示颜色, 你们可以直接使用它)

2) 定义点结构Point实现Shape接口。Point结构中除实现 Shape接口的所有成员外,还必须

包含两个int型私有字段x、y及相应属性,它们用于表示点的坐标。另外,还应为 定义构造函数,并重写方法

ToString 。

Point结构

3) 定义直线类Line实现Shape接口。Line类中除实现Shape接口的所有成员外,还必须包含

两个Point型私有字段point1、point2 及相应属性,它们用于表示直线两个顶点的坐标。另 夕卜,还应为Line类定义构造函数,并重写方法

ToString 。

4) 定义三角形类 Triange实现Shape接口。Triangle类中除实现Shape接口的所有成员外,还

必须包含三个 Point型私有字段及相应属性,它们用于表示三角形三个顶点的坐标。另外,还 应为triangle 类定义方法 Area (求面积)和构造函数,并重写方法

ToString 。

5) 定义四边形类 Quadrilateral 实现Shape接口。Quadrilateral 类中除实现 Shape接口中的所

有成员外,还必须包含四个

Point型私有字段及相应属性,它们用于表示四边形四个顶点的坐

标。另外,还应为Quadrilateral 类定义方法 Area (求面积)和构造函数,并重写方法ToString 。 由于程序后面还需要在 Quadrilateral

类的基础上派生出正方形类, 因此,实现Shape接口时,

ToString时,不妨将它声

应该将方法 Draw、Erase、Move声明为虚拟的,另外,重写方法 明为密封的。

6) 定义圆类Circle实现Shape接口。Circle类中除实现Shape接口的所有成员外,还必须包含

一个Point型私有字段、一个int型私有字段及相应属性,它们分别用于表示圆的圆心坐标及 半径;另外,还应为 Circle类定义Area (求面积)和构造函数,并重写方法

ToString 。

7) 定义正方形类 Square继承Quadrilateral 类。Square类中应重写方法 Draw、Erase、Move 并定义构造

函数。

8) 定义Main方法测试上面定义的类。

* *

3、编写一个实现复数加法程序。 写出实验步骤,并编写调试程序。 五、实验报告要求

1. 实验前需填写好实验的名称和实验目的;

2. 根据实验内容初步设计好程序,并从理论上排除错误; 3. 针对程序的健壮性准备好测试数据;

4. 结果分析中如实填写运行后的结果,并记录调试过程中产生的重要问题和解决方法。

六、根据实验过程填写程序和实验结果 实验1程序:class Book{

private read only stri ng isb n; private string title; private string author;

// 标题

//作者

//书号

private stri ng press; // 出版社 private int price; //价格

public Book(string isbn):this(isbn,\" 未知\未知\未知\

public Book(string isbn,string title,string author,string press,int price){ this.isb n=isb n;

this.title=title; this.author=author; this.press=press; this.price=price;

* *

public stri ng ISBN{

get{

return isb n; } }

public string Title{

get{

return title; } set{

title=value; } }

public stri ng Author{

get{

retur n author;

} set{

* *

author=value; } }

public stri ng Press{

get{

return press; } set{

press=value; } }

public int Price{

get{

return price; } set{

price=value; } }

public void Show(){

Console.WriteLine(\"书号:{0}\);

Console.WriteLine(\"标题:{0}\);

Co nsole.WriteLi ne(\" 作者:{0}\

Co nsole.WriteLi 社:{0}\

ne(\" 出版

Co nsole.WriteLi {0}\

ne(\" 价格:

class Test5_1{

static void Mai n(){

Book book 仁new Book(\"978-7-111-23423-4\");

book1.Show(); Con sole.WriteLi ne();

book1.Title=\"C# 程序设计(C#2.0 版)\";

book1.Author=\" 刘慧宁\"; book1.Press=\" 机械工业出版社\"; book1.Price=32;

book1.Show();

book 仁new Book(\"978-7-302-15800-4\ * *

程序设计\温秀梅\清华大学出版社

* *

Con sole.WriteLi ne();

\

book1.Show(); }

} 结果:

调试过程中产生的重要问题和解决方法: 实验2程序: //定义一个颜色的枚举 enum CColor{

BLACK,BLUE,BROWN,CYAN,GRAY,GREEN,ORANGE,PINK,RED,WHITE,YELLOW }

//定义一个几何图形接口 in terface Shape{

CColor Color{

get; set; }

//绘制的方法

void Draw();

II擦拭的方法

book 仁new * *

程序设计\温秀梅\清华大学出版社

Book(\"978-7-302-15800-4\

void Erase(); //移动的方法 void Move(); }

//定义一个点的结构来实现 struct Poin t:Shape{

private CColor color; private int x,y; public CColor Color{

get{

return color; } set{

color=value; } }

public int X{

get{

return x;

} set{

* *

Shape几何图形的接口

* *

x=value; } }

public int Y{

get{

return y; } set{

y=value; } } /*

public Poi nt(){

} */

public Poin t(i nt x,i nt y){

this.x=x; this.y=y;

this.color=CColor.RED;

}

public void Draw(){

* *

Console.WriteLine(\"绘制一个点”);

}

public void Erase(){

Console.WriteLine(”

擦拭一个点\");

}

public void Move(){

Console.WriteLine(\"移动一个点\"); }

//重写ToString()方法

public override string ToString(){

return \"(\"+x+\} }

〃定义一个直线的类来实现 Shape接口 class Lin e:Shape{

private CColor color; //顶点

private Point poin t1,po in t2;

public CColor Color{ } get{

* *

retur n color; } set{

color=value; } }

public Point Point1{

get{

return poi nt1; } set{

poin t1=value; } }

public Point Point2{

get{

return poi nt2; } set{

poin t2=value;

public Lin e(){

public Line(Point p1,Point p2){ poin t1=p1; poin t2=p2;

}

public void Draw(){ Co nsole.WriteLi 绘制一条直线\");

ne(\" } public void Erase(){

Co nsole.WriteLi 擦拭一条直线\"); ne(\" } public void Move(){

移动一条直线\");

Co nsole.WriteLi ne(\" }

//也重写一下ToString方法 public override string ToString(){

} return \"(\"+poi nt1.T

oStri ng()+\

* *

oStri ng()+\")\";

* *

II定义一个三角形的类同时让它实现

class Trian gle:Shape{

private CColor color; II定义三角形的三个顶点

Shape接口

private Point poin t1,po in t2,po in t3;

public CColor Color{

get{

retur n color; } set{

color=value; } }

public Point Point1{

get{

return poi nt1;

} set{

* *

poin t仁value;

}

}

public Point Point2{

get{

return poi nt2; } set{

poin t2=value; }

}

public Point Point3{

get{

return poi nt3; } set{

poin t3=value; }

}

public Trian gle(){

}

* *

public Triangle(Point p1,Point p2,Point p3){

poin t1=p1; poin t2=p2; poin t3=p3;

}

public void Draw(){

绘制一个三角形”);

Console.WriteLine(”

}

public void Erase(){

Console.WriteLine(” 擦拭一个三角形”);

}

public void Move(){

移动一个三角形”);

Console.WriteLine(”

}

//增加一个三角形自己的求面积的方法

public double Area(){

double area=Math.Abs(poi nt1.X*poi nt2.Y+poi nt2.X*poi nt3.Y+poi nt3.X*poi

nt1.Y -poi nt1.X*poi nt3.Y-poi nt2.X*poi nt1.Y-poi nt3.X*poi nt2.Y)/2.0;

}

* *

return area;

II同样也重写一下 ToString方法

}

* *

public override stri ng T return \"(\"+poi ntl.T } }

oStri ng(){

oStri ng()+\

oStri ng()+\

oStri ng()+\")\";

//定义一个四边形的类同样实现 Shape接口 class Quadrilateral:Shape{

private CColor color; //定义四边形的四个顶点

private Point poi nt1,poi nt2,poi nt3,poi nt4;

public CColor Color{

get{

return color; } set{

color=value; } }

public Point Point1{

get{

return poi nt1;

* *

} set{

poin t仁value;

} }

public Point Point2{

get{

return poi nt2; } set{

poin t2=value; } }

public Point Point3{

get{

return poi nt3; } set{

poin t3=value; }

}

public Poi nt Poi nt4{

* *

get{

return poi nt4; } set{

poin t4=value; } }

public Quadrilateral(){

}

public Quadrilateral(Point p1,Point p2,Point p3,Point p4){

poin t1=p1; poin t2=p2; poin t3=p3; poin t4=p4; }

public virtual void Draw(){

Console.WriteLine(”

绘制一个四边形”);

}

public virtual void Erase(){

* *

Console.WriteLine(\"擦拭一个四边形\");

public virtual void Erase(){

}

public virtual void Move(){

Console.WriteLine(”

移动一个四边形”);

}

//定义一个四边形求面积的方法 public double Area(){

double area=Math.Abs(poi nt1.X*poi nt2.Y-poi nt2.X*poi ntl.Y+poi nt2.X*poi nt3.Y

-poi nt3.X+poi nt2.Y+poi nt3.X*poi nt4.Y-poi nt4.X*poi nt3.Y +poi nt4.X*poi nt1.Y-poi nt1.X*poi nt4.Y)/2.0;

return area;

}

//重写ToString方法

public sealed override string ToString(){

return

\"(\"+poi nt1.T oStri ng()+\

oStri ng()+\oStri ng()+\II.

5

} }

//定义一个圆的类同样让它实现 Shape接口

class Circle:Shape{

* *

oStri ng()+\")

* *

private CColor color;

* *

//定义一个圆心 private Point point; //定义圆的半径

private int radius;

public CColor Color{

get{

retur n color; }

set{ color=value; } }

public Point Point{

get{

return point; } set{

poin t=value; }

}

public int Radius{

get{

return radius; } set{

radius=value; } }

public Circle(){

}

public Circle(Point p,int r){

poi nt=p; radius=r; }

public void Draw(){

Co nsole.WriteLi ne(\" }

public void Erase(){

Co nsole.WriteLi ne(\" }

public void Move(){

Console.WriteLine(”

* *

绘制一个圆\"); 擦拭一个圆\"); 移动一个圆\");

* *

}

//定义一个方法求的面积 public double Area(){

return Math. Pl*radius*radius; }

//同样重写ToString让它格式化字符串 public override stri ng return \"(\"+poi nt.T } }

//定义一个正方形的类,并且它让继承于四边形的类 class Square:Quadrilateral{

public Square(){

ToStri ng(){ oStri ng()+\

}

public Square(Point p1,Point p2,Point p3,Point p4):base(p1,p2,p3,p4){

}

public override void Draw(){

绘制一个正方形”);

Console.WriteLine(” }

public override void Erase(){

* *

Console.WriteLine(\"擦拭一个正方形\");

}

public override void Move(){

Console.WriteLine(”

移动一个正方形\");

} }

//定义一个类放入 Main()方法 class Test6_1{

static void Mai n(){

Point p1= new Point(1,1); Point p2=new Point(1,2); Point p3=new Point(2,2); Point p4=new Point(2,1);

Shape line=new Lin e(p1,p2);

Shape triangle=new Triangle(p1,p2,p3); Shape circle=new Circle(p1,2);

Shape square=new Square(p1,p2,p3,p4);

Console.WriteLine(” lin e.Draw();

直线是{0}\

* *

Co nsole.WriteLi ne(\" 三角形是{0}\

trian gle.Draw();

Co nsole.WriteLi ne(\" 三角形的面积是{0}\

Co nsole.WriteLi ne(\" 圆是{0}\

circle.Draw();

Co nsole.WriteLi ne(\" 圆的面积是{0}\

Co nsole.WriteLi ne(\" 正方形是{0}\

square.Draw();

Co nsole.WriteLi ne(\" 正方形的面积是{0}\

lin e.Move(); circle.Erase(); }

} 结果:

调试过程中产生的重要问题和解决方法:

* *

完成预编程: 调试过程: 实验成绩等级: NO: 1 时间:月 日 教师签名:

因篇幅问题不能全部显示,请点此查看更多更全内容