类的设计和实现.docx
- 文档编号:7327226
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:21
- 大小:228.88KB
类的设计和实现.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 const double PI=3.1415926; class MyMath { public : ﻩMyMath(intR) { r=R; } static double Perimeter(doubler) { double p=2*PI*r; ﻩﻩreturnp; ﻩ} ﻩstatic doubleArea(doubler) { doublea=PI*r*r; ﻩﻩreturna; ﻩ} ﻩstatic doubleVolume(doubler) { ﻩdoublev=4*PI*r*r*r/3; ﻩﻩreturnv; ﻩ} voidoutput() ﻩ{ ﻩﻩcout<<"圆的周长="<<Perimeter(r)<<'\n'<<endl; ﻩcout<<"圆的面积="<<Area(r)<<'\n'< ﻩcout<<"圆的体积="< } private: ﻩdoublep; ﻩdoublea; ﻩdoublev; double r; }; voidmain() {double r; ﻩcout<<"请输入圆的半径: "; ﻩcin>>r; ﻩMyMath math(r); math.output (); ﻩ } 运行结果是: 实验5-2 创建表示摄氏温度的类TemperatureCelsius 实验要求: 创建类TemperatureCelsius,包含实例字段degree(表示摄氏温度)和实例方法ToFahreheirt(将摄氏温度转换为华氏温度)。 运行结果如图5-2所示 操作提示: 程序代码如下 按F5键运行: 实验5-2运用c++语言的代码如下: #include class TemperatureCelsius { public: TemperatureCelsius(double d) { degree=d; } ﻩdoubleToFahrenheit(double degree) ﻩ{ ﻩp=(degree*9/5)+32; return p; ﻩ} private: doubledegree; ﻩdoublep; }; void main() { doubled,cel; cout<<"请输入摄氏温度: "; cin>>d; ﻩTemperatureCelsius tem(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; ﻩint age; ﻩPerson(char*Name,intAge) { name=Name; ﻩage=Age; } }; classTeacher: virtual publicPerson { public: int id; ﻩTeacher(char* Name,intAge,intId): Person(Name,Age) { ﻩﻩid=Id; } ﻩvoid output() { cout<<"姓名: "<<name<<'\n'<<"年龄: "< "< } }; 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<iostream.h> class Shape { public: ﻩvirtualfloatarea()=0; }; classTriangle: publicShape { public: ﻩTriangle(floath,floatw) { ﻩH=h;W=w; } ﻩ ﻩfloat area() ﻩ{ ﻩ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: "< ﻩCircle cir(3.5); cout<<"Circle: 大圆,area: "< }ﻩﻩ 运行结果是: 实验5-5 运算符重载 实验要求: 使用符重载创建定义复数相加、相减和相乘的复数类Complex。 运行结果如图5-5 按F5键运行: 实验5-5运用C++语言编写的代码如下: #include class Complex { public: ﻩComplex(doubler=0,double i=0) { ﻩrealPart=r;imagePart=i; } ﻩvoid print() ﻩ{ ﻩ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; return temp; } ComplexComplex: : operator*(Complex&c) { Complex temp; 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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 实现