* *
实验二 面向对象的程序设计
(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 时间:月 日 教师签名:
因篇幅问题不能全部显示,请点此查看更多更全内容