类的设计和实现.docx
- 文档编号:4729694
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:21
- 大小:227.17KB
类的设计和实现.docx
《类的设计和实现.docx》由会员分享,可在线阅读,更多相关《类的设计和实现.docx(21页珍藏版)》请在冰豆网上搜索。
类的设计和实现
类
的
设
计
和
实
现
专业:
xxxxxxx
姓名:
xxxxxx
学号:
xxxxxxxx
计算机与信息技术学院综合性、设计性实验报告
专业:
计算机科学与技术年级/班级:
2010级2010—2011学年第二学期
课程名称
.NET程序设计
指导教师
xxxxx
本组成员
学号姓名
xxxxxxxxxxxxxxx
实验地点
xxxxxxxxx
实验时间
xxxxxxxxxx。
项目名称
类
实验类型
综合性
实验目的:
掌握类的声明和对象的创建
掌握对象的封装性
掌握类的访问修饰符
掌握类的继承的实现
掌握派生类、抽象类、抽象方法的使用
掌握类的多态性
掌握运算符的重载
了解接口的实现
了解事件的实现
实验仪器或设备:
安装有visualStudio2008的计算机
总体设计(设计原理、设计方案及流程等)
(1)通过实验表明类的概念,类的对象,类的成员;
(2)分别例举不同对象的类;
实验步骤(包括主要步骤、代码分析等)
实验5-1创建类MyMath,计算周长、面积和球的体积。
实验要求:
创建类MyMath,包含常量;PI;静态方法:
Perimeter(周长)、Area(面积)、Volumne(体积)。
运行结果如图5-1所示。
操作提示:
程序代码如下。
按F5键运行:
实验5-1的程序运用c++语言编写,其代码如下
#include
#include
constdoublePI=3.1415926;
classMyMath
{
public:
MyMath(intR)
{
r=R;
}
staticdoublePerimeter(doubler)
{
doublep=2*PI*r;
returnp;
}
staticdoubleArea(doubler)
{
doublea=PI*r*r;
returna;
}
staticdoubleVolume(doubler)
{
doublev=4*PI*r*r*r/3;
returnv;
}
voidoutput()
{
cout<<"圆的周长="< cout<<"圆的面积="< cout<<"圆的体积="< } private: doublep; doublea; doublev; doubler; }; voidmain() {doubler; cout<<"请输入圆的半径: "; cin>>r; MyMathmath(r); math.output(); } 运行结果是: 实验5-2创建表示摄氏温度的类TemperatureCelsius 实验要求: 创建类TemperatureCelsius,包含实例字段degree(表示摄氏温度)和实例方法ToFahreheirt(将摄氏温度转换为华氏温度)。 运行结果如图5-2所示 操作提示: 程序代码如下 按F5键运行: 实验5-2运用c++语言的代码如下: #include classTemperatureCelsius { public: TemperatureCelsius(doubled) { degree=d; } doubleToFahrenheit(doubledegree) { p=(degree*9/5)+32; returnp; } private: doubledegree; doublep; }; voidmain() { doubled,cel; cout<<"请输入摄氏温度: "; cin>>d; TemperatureCelsiustem(d); cout<<"摄氏温度="< cout<<"华氏温度="< } 运行结果是: 实验5-3类的继承的实现 实验要求: 创建基类Person和派生类Teacher。 基类Person包含实例字段name和age;虚函数GetInfo()显示个人信息。 派生类Teacher除了包含基类的namw和age字段。 还包含自己的TeacherID字段,并使用关键字override来重写方法GetInfo()。 运行结果如图5-3所示 按F5键运行: 实验5-3运用C++语言编写的代码是: #include #include #include classPerson { public: char*name; intage; Person(char*Name,intAge) { name=Name; age=Age; } }; classTeacher: virtualpublicPerson { public: intid; Teacher(char*Name,intAge,intId): Person(Name,Age) { id=Id; } voidoutput() { cout<<"姓名: "< "< "< } }; voidmain() { charname[20]; strcpy(name,"Mr.Yu"); Teachert1(name,40,1990108001); t1.output(); } 运行结果是: 实验5-4抽象类、抽象方法、多态性的实现 实验要求: 创建抽象基类Shape和派生类Rectangle、Circle。 利用多态性实现Area(计算面积)和Show(显示图形名称和面积)抽象方法。 按F5键运行: 实验5-4运用C++语言编写的代码是: #include classShape { public: virtualfloatarea()=0; }; classTriangle: publicShape { public: Triangle(floath,floatw) { H=h;W=w; } floatarea() { return(float)(H*W*0.5); } private: floatH,W; }; classCircle: publicShape { public: Circle(floatr) { R=r; } floatarea() { return(float)(3.1415926*R*R); } private: floatR; }; voidmain() { Shape*p; Triangletri(1.0,2.0); cout<<"Rectangle: 小矩形,area: "< Circlecir(3.5); cout<<"Circle: 大圆,area: "< } 运行结果是: 实验5-5运算符重载 实验要求: 使用符重载创建定义复数相加、相减和相乘的复数类Complex。 运行结果如图5-5 按F5键运行: 实验5-5运用C++语言编写的代码如下: #include classComplex { public: Complex(doubler=0,doublei=0) { realPart=r;imagePart=i; } voidprint() { cout< } Complexoperator+(Complex&c); Complexoperator-(Complex&c); Complexoperator*(Complex&c); private: doublerealPart; doubleimagePart; }; ComplexComplex: : operator+(Complex&c) { Complextemp; temp.realPart=realPart+c.realPart; temp.imagePart=imagePart+c.imagePart; returntemp; } ComplexComplex: : operator-(Complex&c) { Complextemp; temp.realPart=realPart-c.realPart; temp.imagePart=imagePart-c.imagePart; returntemp; } ComplexComplex: : operator*(Complex&c) { Complextemp; temp.realPart=realPart*c.realPart-imagePart*c.imagePart; temp.imagePart=realPart*c.imagePart+imagePart*c.realPart; returntemp; } voidmain() { Complexc1(4,5),c2(3,2),sum,sub,mul; sum=c1+c2; sub=c1-c2; mul=c1*c2; cout<<"第一个复数: "; c1.print(); cout<<"第二个复数: "; c2.print(); cout<<"两个复数之和: "; sum.print(); cout<<"两个复数之差"; sub.print(); cout<<"两个复数之积"; mul.print(); } 其运行结果如下: 实验5-6接口的实现 实验要求: 声明一个接口ICDPlayer,包含4个接口方法: Play()、Stop()、NextTrack()和PreviousTrack(),以及一个只读属性CurrentTrank。 创建类CDPlayer实现该接口,模拟CD的播放、停止、下一音轨、上一音轨的操作。 按F5键运行: 实验5-7事件的实现 实验要求: (1)声明提供事件数据的类。 (2)、声明事件处理委托。 (3)、声明引发事件的类(4)、在事件生产类中声明事件。 (5)在事件生产类中实现产生事件代码。 (6)声明处理事件的类(事件消费类)。 (7)在事件消费类中声明事件处理方法。 (8)在事件消费类中订阅或取消事件。 按F5键运行: (一)结果分析与总结: (1)、一个常量可以依懒于同一程序内的其他常量。 只要关系不是循环的,编译器会自动滚屏的安排的顺序来计算各个常量的声明。 常量名称的第一个字母一般都是大写,也可以全部都大写。 多个字符之间可用下划线连接成为常量名 (2)、通过使用operator关键字定义静态成员函数重载运算符,c#中的有的可以重载,但是[]和()不能重载。 但可以用索引来代替[]的重载,用户定义的数据类型转换代替()的重载。 比较运算符必须成对出现。 (3)、抽象类使用关键字abstract添加到实例方法的返回结果。 抽象类不能实例化对象,一般用于提供多个派生类的基类的公共定义。 抽象类不能直接实例化,用new初始化对象会出现编译错误。 可以定义抽象类型的变量,但是它必须是null,或是其派生类非抽象类的实例引用。 当从抽象类派生非抽象类时,非抽象必须实现所继承的所有抽象成员,故而重写那些抽象成员 (二)类在C#和C++中的区别与联系 (1)在C++中,继承的分类有单继承和多继承,而且在继承方式上分为公有继承、私有继承和保护继承;而在C#中继承只分为实现继承和接口继承。 (2)在C++中抽象类是指至少包含一个纯虚函数的特殊的类,它本身不能被实例化,必须通过继承得到派生类后,在派生类中定义了纯虚函数的具体的实现代码,才能获得一个派生类的对象;C#中将关键字abstract置于关键字class的前面可以将类声明为抽象类,抽象类不能被实例化,一般用于提供多个派生类可共享的基类的公共定义,并要求程序员使用该库通过创建派生类来提供自己的类实现。 (3)在运算符重载这一方面,c#和c++中的关键字都为operator,而且对能重载的运算符的要求也一样,但在重载的一般形式上有点区别, c++的一般形式为: <函数类型><类名>: : operator<重载的运算符>(<形参表>) {……}//函数体 C#.net中的一般形式为: [修饰符]static类型operator运算符(参数表) { 转换代码体 }[;] 教教师签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 实现