实验项目类的设计与使用.docx
- 文档编号:8686629
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:16
- 大小:19.32KB
实验项目类的设计与使用.docx
《实验项目类的设计与使用.docx》由会员分享,可在线阅读,更多相关《实验项目类的设计与使用.docx(16页珍藏版)》请在冰豆网上搜索。
实验项目类的设计与使用
实验项目3 类的设计与使用
1) 实验目的
(1)、掌握C#中类的结构
(2)、掌握构造函数的使用方法
(3)、熟练继承和重载的使用
2) 实验原理
(1)类的定义
类的定义是以关键字 class 开始,后跟类的名称。
类的主体,包含在一对花括号内。
下面是类定义的一般形式:
[访问修饰符][static]class类名[:
基类[,接口序列]]
{
[类成员]
}
(2)构造函数
类的构造函数是类的一个特殊的成员函数,当创建类的新对象时执行。
构造函数的名称与类的名称完全相同,它没有任何返回类型。
(3)类的继承
语法:
classDrevedClass:
BaseClass
{
[派生类成员]
}
如果类或结构也派生自接口,则用逗号分隔列表中的基类和接口:
classDrevedClass:
BaseClass,IIntenface1,IIntenface2
{
[派生类成员]
}
(4)重载
指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。
3) 主要仪器及耗材
PC、VS2010/2012/2015
4) 实验内容和步骤
实验内容1:
图书类
(1)实验题目:
创建一个描述图书信息的类并测试。
类中应保存有图书的书号、标题、作者、出版社、价格等信息。
(2)实验步骤:
步骤1:
定义图书类Book,Book类中包含isbn(书号)、title(标题)、author(作者)、press(出版社)、price(价格)等私有字段。
由于对一本书来说,书号是唯一的,因此,isbn字段应声明为只读的。
步骤2:
为Book类中的每个字段定义相应的属性,由于isbn字段只读的,其相应属性也应该是只读的。
步骤3:
为Book类定义两个构造函数,其中,一个构造函数将所有字段都初始化为用户指定的值,另一个构造函数只要求用户指定有关书号的信息,它将调用上一个构造函数初始化对象,初始化时,价格取0,除书号的其他信息取“未知”。
步骤4:
为Book类定义方法Show,Show方法用于显示图书的所有信息。
步骤5:
编写Main方法测试Book类,Main方法中分别使用上述两个构造函数创建Book对象。
(3)参考代码:
//Test3_1.cs
usingSystem;
classBook{
privatereadonlystringisbn;//书号
privatestringtitle;//标题
privatestringauthor;//作者
privatestringpress;//出版社
privateintprice;//价格
publicBook(stringisbn):
this(isbn,"未知","未知","未知",0){//构造函数间的调用
}
publicBook(stringisbn,stringtitle,stringauthor,stringpress,intprice){
this.isbn=isbn;
this.title=title;
this.author=author;
this.press=press;
this.price=price;
}
publicstringISBN{
get{returnisbn;}
}
publicstringTitle{
get{returntitle;}
set{title=value;}
}
publicstringAuthor{
get{returnauthor;}
set{author=value;}
}
publicstringPress{
get{returnpress;}
set{press=value;}
}
publicintPrice{
get{returnprice;}
set{price=value;}
}
publicvoidShow(){
Console.WriteLine("书号:
{0}",isbn);
Console.WriteLine("标题:
{0}",title);
Console.WriteLine("作者:
{0}",author);
Console.WriteLine("出版社:
{0}",press);
Console.WriteLine("价格:
{0}",price);
}
}
classTest3_1{
staticvoidMain(){
Bookbook1=newBook("978-7-111-23423-4");
book1.Show();
Console.WriteLine();
book1.Title="C#程序设计(C#2.0版)";
book1.Author="刘慧宁";
book1.Press="机械工业出版社";
book1.Price=32;
book1.Show();
Console.WriteLine();
book1=newBook("978-7-302-15800-4","Java程序设计","温秀梅","清华大学出版社",29);book1.Show();
}
}
实验内容2:
简单几何图形描述
(1)实验题目:
根据几何图形的组合与继承关系定义用于描述点、直线、三角形、四边形、正方形、圆等几何图形的类(或结构)。
要求首先定义一个几何图形接口描述所有几何图形的共有特性,上述几何图形都必须现实该接口,并且其中用于描述点的类型最好定义为结构。
(2)实验步骤:
步骤1:
定义几何图形接口Shape。
Shape接口中包含属性Color,用于读取和设置几何图形的颜色;包含方法Draw、Erase、Move,用于绘制、擦拭、移动几何图形。
由于属性Color的类型无法用基本数据类型准确描述,程序中还需要另外定义一个表示颜色的枚举类型CColor(实验上,.NET框架类库中定义有一个Color结构,它可以更好地表示颜色,你们可以直接使用它)。
步骤2:
定义点结构Point实现Shape接口。
Point结构中除实现Shape接口的所有成员外,还必须包含两个int型私有字段x、y及相应属性,它们用于表示点的坐标。
另外,还应为Point结构定义构造函数,并重写方法ToString。
步骤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接口时,应该将方法Draw、Erase、Move声明为虚拟的,另外,重写方法ToString时,不妨将它声明为密封的。
步骤6:
定义圆类Circle实现Shape接口。
Circle类中除实现Shape接口的所有成员外,还必须包含一个Point型私有字段、一个int型私有字段及相应属性,它们分别用于表示圆的圆心坐标及半径;另外,还应为Circle类定义Area(求面积)和构造函数,并重写方法ToString。
步骤7:
定义正方形类Square继承Quadrilateral类。
Square类中应重写方法Draw、Erase、Move并定义构造函数。
步骤8:
定义Main方法测试上面定义的类。
(3)参考代码:
//Test3_2.cs
usingSystem;
//定义一个颜色的枚举
enumCColor{
BLACK,BLUE,BROWN,CYAN,GRAY,GREEN,ORANGE,PINK,RED,WHITE,YELLOW
}
//定义一个几何图形接口
interfaceShape{
CColorColor{
get;
set;
}
//绘制的方法
voidDraw();
//擦拭的方法
voidErase();
//移动的方法
voidMove();
}
//定义一个点的结构来实现Shape几何图形的接口
structPoint:
Shape{
privateCColorcolor;
privateintx,y;
publicCColorColor{
get{returncolor;}
set{color=value;}
}
publicintX{
get{returnx;}
set{x=value;}
}
publicintY{
get{returny;}
set{y=value;}
}
publicPoint(){}
publicPoint(intx,inty){
this.x=x;
this.y=y;
this.color=CColor.RED;
}
publicvoidDraw(){
Console.WriteLine("绘制一个点");
}
publicvoidErase(){
Console.WriteLine("擦拭一个点");
}
publicvoidMove(){
Console.WriteLine("移动一个点");
}
//重写ToString()方法
publicoverridestringToString(){
return"("+x+","+y+")";
}
}
//定义一个直线的类来实现Shape接口
classLine:
Shape{
privateCColorcolor;
//顶点
privatePointpoint1,point2;
publicCColorColor{
get{returncolor;}
set{color=value;}
}
publicPointPoint1{
get{returnpoint1;}
set{point1=value;}
}
publicPointPoint2{
get{returnpoint2;}
set{point2=value;}
}
publicLine(){}
publicLine(Pointp1,Pointp2){
point1=p1;
point2=p2;
}
publicvoidDraw(){
Console.WriteLine("绘制一条直线");
}
publicvoidErase(){
Console.WriteLine("擦拭一条直线");
}
publicvoidMove(){
Console.WriteLine("移动一条直线");
}
//也重写一下ToString方法
publicoverridestringToString(){
return"("+point1.ToString()+","+point2.ToString()+")";
}
}
//定义一个三角形的类同时让它实现Shape接口
classTriangle:
Shape{
privateCColorcolor;
//定义三角形的三个顶点
privatePointpoint1,point2,point3;
publicCColorColor{
get{returncolor;}
set{color=value;}
}
publicPointPoint1{
get{returnpoint1;}
set{point1=value;}
}
publicPointPoint2{
get{returnpoint2;}
set{point2=value;}
}
publicPointPoint3{
get{returnpoint3;}
set{point3=value;}
}
publicTriangle(){}
publicTriangle(Pointp1,Pointp2,Pointp3){
point1=p1;
point2=p2;
point3=p3;
}
publicvoidDraw(){
Console.WriteLine("绘制一个三角形");
}
publicvoidErase(){
Console.WriteLine("擦拭一个三角形");
}
publicvoidMove(){
Console.WriteLine("移动一个三角形");
}
//增加一个三角形自己的求面积的方法
publicdoubleArea(){
doublearea=Math.Abs(point1.X*point2.Y+point2.X*point3.Y+point3.X*point1.Y
-point1.X*point3.Y-point2.X*point1.Y-point3.X*point2.Y)/2.0;
returnarea;
}
//同样也重写一下ToString方法
publicoverridestringToString(){
return"("+point1.ToString()+","+point2.ToString()+","+point3.ToString()+")";
}
}
//定义一个四边形的类同样实现Shape接口
classQuadrilateral:
Shape{
privateCColorcolor;
//定义四边形的四个顶点
privatePointpoint1,point2,point3,point4;
publicCColorColor{
get{returncolor;}
set{color=value;}
}
publicPointPoint1{
get{returnpoint1;}
set{point1=value;}
}
publicPointPoint2{
get{returnpoint2;}
set{point2=value;}
}
publicPointPoint3{
get{returnpoint3;}
set{point3=value;}
}
publicPointPoint4{
get{returnpoint4;}
set{point4=value;}
}
publicQuadrilateral(){}
publicQuadrilateral(Pointp1,Pointp2,Pointp3,Pointp4){
point1=p1;
point2=p2;
point3=p3;
point4=p4;
}
publicvirtualvoidDraw(){
Console.WriteLine("绘制一个四边形");
}
publicvirtualvoidErase(){
Console.WriteLine("擦拭一个四边形");
}
publicvirtualvoidMove(){
Console.WriteLine("移动一个四边形");
}
//定义一个四边形求面积的方法
publicdoubleArea(){
doublearea=Math.Abs(point1.X*point2.Y-point2.X*point1.Y+point2.X*point3.Y
-point3.X+point2.Y+point3.X*point4.Y-point4.X*point3.Y
+point4.X*point1.Y-point1.X*point4.Y)/2.0;
returnarea;
}
//重写ToString方法
publicsealedoverridestringToString(){
return"("+point1.ToString()+","+point2.ToString()+","+point3.ToString()+","+point4.ToString()+")";
}
}
//定义一个圆的类同样让它实现Shape接口
classCircle:
Shape{
privateCColorcolor;
//定义一个圆心
privatePointpoint;
//定义圆的半径
privateintradius;
publicCColorColor{
get{returncolor;}
set{color=value;}
}
publicPointPoint{
get{returnpoint;}
set{point=value;}
}
publicintRadius{
get{returnradius;}
set{radius=value;}
}
publicCircle(){}
publicCircle(Pointp,intr){
point=p;
radius=r;
}
publicvoidDraw(){
Console.WriteLine("绘制一个圆");
}
publicvoidErase(){
Console.WriteLine("擦拭一个圆");
}
publicvoidMove(){
Console.WriteLine("移动一个圆");
}
//定义一个方法求的面积
publicdoubleArea(){
returnMath.PI*radius*radius;
}
//同样重写ToString让它格式化字符串
publicoverridestringToString(){
return"("+point.ToString()+","+radius+")";
}
}
//定义一个正方形的类,并且它让继承于四边形的类
classSquare:
Quadrilateral{
publicSquare(){}
publicSquare(Pointp1,Pointp2,Pointp3,Pointp4):
base(p1,p2,p3,p4){}
publicoverridevoidDraw(){
Console.WriteLine("绘制一个正方形");
}
publicoverridevoidErase(){
Console.WriteLine("擦拭一个正方形");
}
publicoverridevoidMove(){
Console.WriteLine("移动一个正方形");
}
}
//定义一个类放入Main()方法
classTest3_2{
staticvoidMain(){
Pointp1=newPoint(1,1);
Pointp2=newPoint(1,2);
Pointp3=newPoint(2,2);
Pointp4=newPoint(2,1);
Shapeline=newLine(p1,p2);
Shapetriangle=newTriangle(p1,p2,p3);
Shapecircle=newCircle(p1,2);
Shapesquare=newSquare(p1,p2,p3,p4);
Console.WriteLine("直线是{0}",line);
line.Draw();
Console.WriteLine("三角形是{0}",triangle);
triangle.Draw();
Console.WriteLine("三角形的面积是{0}",((Triangle)triangle).Area());
Console.WriteLine("圆是{0}",circle);
circle.Draw();
Console.WriteLine("圆的面积是{0}",((Circle)circle).Area());
Console.WriteLine("正方形是{0}",square);
square.Draw();
Console.WriteLine("正方形的面积是{0}",((Square)square).Area());
line.Move();
circle.Erase();
}
}
6) 实验注意事项
(1)本实验创建的程序是控制台程序。
(2)在IDE环境下运行控制台程序,运行窗口会很快退出。
可在代码最后加上如下一行代码:
Console.ReadKey();//程序暂停,等待按任意一个键。
7) 思考题
1、请结合第一个实验题目说明构造函数调用另一个构造函数的方法。
2、C#中如何实现类的继承,和接口的实现?
3、什么叫方法的重载?
什么叫方法的重写?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 项目 设计 使用