C程序设计总实习报告Word文件下载.doc
《C程序设计总实习报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《C程序设计总实习报告Word文件下载.doc(62页珍藏版)》请在冰点文库上搜索。
派生类Teacher除了包含基类的name和age字段,还包括自己的TeacherID字段,并使用关键字override来重写方法GetInfo()显示教师信息(显示name、age和TeacherID的值)。
运行效果如图所示。
3.创建抽象类基类Shape和派生类Rectangle、Circle、Square。
利用多态性实现Area(计算面积)和Show(显示图形名称和面积)抽象方法。
具体要求如下:
l抽象类Shape中有字段name(名称)及两个抽象方法Show(显示名称及面积)、Area(面积)。
l派生类Rectangle(矩形)中有字段weigh(宽度)、height(高度)及两个覆盖方法Show(显示名称及面积)、Area(计算矩形的面积)。
l派生类Circle(圆)中有字段radius(半径)及两个覆盖方法Show(显示名称及面积)、Area(计算圆的面积)。
l派生类Square(正方形)中有字段weigh(边长)及两个覆盖方法Show(显示名称及面积)、Area(计算正方形的面积)。
实验数据记录及分析(或程序及运行结果)
1
namespaceConsoleApplication1
{
classProgram
{
publicclassParent
{publicParent(){}
publicvoidMethodA()
{
Console.WriteLine("
调用MethodA()"
);
}
}
publicclassChild:
Parent
{publicChild(){}
publicvoidMethodB()
{Console.WriteLine("
调用MethodB()"
}
classTest
{
staticvoidMain()
{ParentoParent=newParent();
oParent.MethodA();
ChildoChild=newChild();
oChild.MethodB();
oChild.MethodA();
ParentoParent1=(Parent)oChild;
Console.ReadLine();
ChildoChild1=(Child)oParent1;
oChild1.MethodB();
oChild1.MethodA();
Console.ReadKey();
}
}}
2
namespaceConsoleApplication2
publicclassPerson
publicstringname;
publicuintage;
publicPerson(stringname,uintage)
{
this.name=name;
this.age=age;
publicvirtualvoidGetInfo()
Console.WriteLine("
Name:
{0}"
name);
Age:
age);
publicclassTeacher:
Person
publicstringteacherID;
publicTeacher(stringname,uintage,stringid)
:
base(name,age)
this.teacherID=id;
;
publicoverridevoidGetInfo()
base.GetInfo();
TeacherID:
teacherID);
publicclassTestPersonTeacher
staticvoidMain(string[]args)
Teacherobjteacher=newTeacher("
Mr.Yu"
40,"
1990108001"
objteacher.GetInfo();
Console.ReadKey();
}
3
publicabstractclassShape
publicstringname;
publicShape(stringname)
this.name=name;
publicabstractdoubleArea();
publicabstractvoidShow();
publicclassRectangle:
Shape
publicintweight,height;
publicRectangle(intweight1,intheight1,stringname):
base(name)
weight=weight1;
height=height1;
publicoverridevoidShow()
Console.WriteLine("
Rectangle:
{0},Area:
{1}"
name,weight*height);
publicoverridedoubleArea()
returnweight*height;
publicclassCircle:
publicintradius;
publicCircle(intr,stringid)
:
base(id)
radius=r;
name,radius*radius*System.Math.PI);
returnradius*radius*System.Math.PI;
publicclassSquare:
publicintweight;
publicSquare(intweight1,stringid)
name,weight*weight);
returnweight*weight;
classTest
staticvoidMain()
Shapeshapes1=newRectangle(2,1,"
小矩形"
Shapeshapes2=newCircle(5,"
大圆"
Shapeshapes3=newSquare(2,"
中正方形"
shapes1.Show();
shapes2.Show();
shapes3.Show();
Console.ReadKey();
评语:
日期:
年月日
实验二:
抽象类、抽象方法、密封类、密封方法
1.掌握抽象类的定义方法。
2.掌握抽象方法的调用方法。
3.了解密封类、密封方法的使用。
1.运行课本例8.6,仔细理解抽象方法的定义及调用方法。
注:
此题不必给出程序代码,只需给出运行结果,并写出抽象方法的定义要点。
2.定义一个车辆(Vehicle)基类;
然后以该类为基类,派生出bicycle、car等类,并编程对该派生类的功能进行验证。
l类Vehicle有三个字段:
Speed、MaxSpeed、Weight。
类Vehicle有一个构造函数,其功能是通过参数设置字段Speed、MaxSpeed、Weight的值。
l为派生类bicycle添加一个新字段Price,并设计构造函数,在构造函数中通过参数设置字段Speed、MaxSpeed、Weight、Price的值。
并在验证时调用这些该构造函数,测试用例:
Speed=10、MaxSpeed=30、Weight=20000、Price=1000。
l为派生类car添加一个新字段Price,并设计构造函数,在构造函数中通过参数设置字段Speed、MaxSpeed、Weight、Price的值。
Speed=60、MaxSpeed=150、Weight=3000000、Price=100000。
lVehicle有两个虚方法Run和Stop。
Run方法显示“一辆车在马路上奔驰。
”,Stop方法显示“一辆车在马路上停了下来。
”。
l派生类bicycle的Run方法显示“一辆自行车在马路上奔驰。
”,Stop方法显示“一辆自行车在马路上停了下来。
l派生类car的Run方法显示“一辆汽车在马路上奔驰。
”,Stop方法显示“一辆汽车在马路上停了下来。
l对派生类的功能进行验证。
提示:
验证bicycle类的代码可如下所示:
验证结果类似下图:
3.现要将第2题中Vehicle的虚方法Run和Stop改为抽象方法,应该怎样修改?
请写出修改后的类Vehicle的定义。
4.写出下面程序的运行结果并分析其原因。
抽象类中通过将关键字abstract添加到实例方法的返回类型的前面可以定义抽象方法。
抽象方法声明引入一个新的虚方法,但不提供该方法的任何实际实现,所以抽象方法的方法体只由一个分好组成,而不是常规的方法块。
非抽象类的派生类必须重写抽象方法以提供它们自己的实现。
虽然抽象方法同时隐含为虚方法,但是它不能有virtual修饰符。
只允许在抽象类中使用抽象方法声明
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
publicclassVehicle
publicdoublespeed;
publicdoublemaxspeed;
publicdoubleweight;
publicVehicle(doublespeed,doublemaxspeed,doubleweight)
this.speed=speed;
this.maxspeed=maxspeed;
this.weight=weight;
publicvirtualstringrun()
return"
一辆车在马路上奔驰"
publicvirtualstringstop()
一辆车在马路上停了下来"
publicclassBicycle:
Vehicle
publicdoublebicycleprice;
publicBicycle(doublespeed,doublemaxspeed,doubleweight,doubleprice)
base(speed,maxspeed,weight)
this.bicycleprice=price;
publicoverridestringrun()
一辆自行车在马路上奔驰"
publicoverridestringstop()
一辆自行车在马路上停了下来"
publicabstractclassVehicle
publicabstractvoidrun()
{}
publicabstractvoidstop()
4
a.F()A.F父类A的F方法
b.F()B.F子类B的F方法
a.G()B.G子类B把父类A的G方法覆盖了所以用B的G方法
b.G()B.G子类B的G方法
实验三:
接口
掌握接口的声明、实现方法,能够通过接口实现简单系统功能的组织。
1.运行课本例8.8,仔细理解接口的定义及实现方法。
此题不必给出程序代码,只需给出运行结果,并写出①接口的定义与实现要点;
②什么是显式接口实现,在何种情况下使用显式接口实现。
2.声明一个接口ICDPlayer,包含4个接口方法:
Play()、Stop()、NextTrack()和PreviousTrack(),以及一个只读属性CurrentTrack。
创建类CDPlayer实现该接口,模拟CD的播放、停止、下一音轨、上一音轨的操作。
3.接口的实现
(1)定义接口IShow,其中含有Show方法;
(2)定义类Voice,含有voice_method方法;
(3)定义PC和TV两个类,同时继承Voice类和IShow接口,并分别重写Show
(4)在主程序中调用所实现的方法,对该派生类的功能进行验证。
①
一个接口定义一个。
接口本身不提供它所定义的成员的实现,只指定实现该的类或结构必须提供的成员,继承接口的任何非抽象类型都必须实现接口的所有成员。
接口类似于抽象基类,不能不能实例化。
接口中声明的成员隐式地为public何abstract。
接口可以包含事件,索引器,方法和属性,但不包含字段。
虽然C#类不支持基类的多重继承,但类和结构可以多个接口继承,接口自身可以从多个接口继承。
②在某种情况下,实现类实现两个以上的接口,且这些接口具有相同成员名称。
为了区分具体实现哪个接口的哪个成员,可以采用显式接口实现,即在实现的成员前面加上接口的限定符,为每个接口成员提供一个实现。
classProgram
publicinterfaceICDPlayer
voidPlay();
voidStop();
voidNextTrack();
voidPreviousTrack();
intCurrentTrack
get;
publicclassCDPlayer:
ICDPlayer
privateintcurrentTrack=0;
publicvoidPlay()
启动CD"
publicvoidStop()
停止CD"
publicvoidPreviousTrack()
前一个音轨ì
..."
if(currentTrack>
=1)
currentTrack--;
publicvoidNextTrack()
后一个音轨..."
currentTrack++;