类的设计和实现Word文件下载.docx
《类的设计和实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《类的设计和实现Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
掌握类的继承的实现
掌握派生类、抽象类、抽象方法的使用
掌握类的多态性
掌握运算符的重载
了解接口的实现
了解事件的实现
实验仪器或设备:
安装有visualStudio2008的计算机
总体设计(设计原理、设计方案及流程等)
(1)通过实验表明类的概念,类的对象,类的成员;
(2)分别例举不同对象的类;
实验步骤(包括主要步骤、代码分析等)
实验5-1 创建类MyMath,计算周长、面积和球的体积。
实验要求:
创建类MyMath,包含常量;
PI;
静态方法:
Perimeter(周长)、Area(面积)、Volumne(体积)。
运行结果如图5-1所示。
操作提示:
程序代码如下。
按F5键运行:
实验5-1的程序运用c++语言编写,其代码如下
#include<
iostream.h>
#include<
math.h>
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'
<<
endl;
ﻩcout<
圆的体积="
Volume(r)<
'\n'
endl;
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<
iostream.h>
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);
摄氏温度="
d<<
endl;
cout<<
"华氏温度="
tem.ToFahrenheit(d)<
endl;
实验5-3 类的继承的实现
创建基类Person和派生类Teacher。
基类Person包含实例字段name和age;
虚函数GetInfo()显示个人信息。
派生类Teacher除了包含基类的namw和age字段。
还包含自己的TeacherID字段,并使用关键字override来重写方法GetInfo()。
运行结果如图5-3所示
按F5键运行:
实验5-3运用C++语言编写的代码是:
#include<
iostream.h>
#include<
stdio.h>
#include<
string.h>
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'<
"年龄:
age<
编号:
id<
<endl;
voidmain()
charname[20];
ﻩstrcpy(name,"
Mr.Yu");
Teachert1(name,40,1990108001);
ﻩt1.output();
实验5-4 抽象类、抽象方法、多态性的实现
创建抽象基类Shape和派生类Rectangle、Circle。
利用多态性实现Area(计算面积)和Show(显示图形名称和面积)抽象方法。
实验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:
tri.area()<
endl;
ﻩCircle cir(3.5);
Circle:
大圆,area:
"<
cir.area()<
}ﻩﻩ
实验5-5 运算符重载
使用符重载创建定义复数相加、相减和相乘的复数类Complex。
运行结果如图5-5
按F5键运行:
实验5-5运用C++语言编写的代码如下:
#include<
iostream.h>
class Complex
public:
ﻩComplex(doubler=0,double i=0)
ﻩrealPart=r;
imagePart=i;
ﻩvoid print()
ﻩcout<
realPart<
<"+"
imagePart<<
i"
endl;
Complexoperator+(Complex &
c);
ﻩComplexoperator-(Complex&
ﻩ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&
Complextemp;
ﻩtemp.realPart=realPart-c.realPart;
temp.imagePart=imagePart-c.imagePart;
return temp;
ComplexComplex:
operator*(Complex&
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的播放、停止、下一音轨、上一音轨的操作。
实验5-7 事件的实现
(1)声明提供事件数据的类。
(2)、声明事件处理委托 。
(3)、声明引发事件的类(4)、在事件生产类中声明事件。
(5)在事件生产类中实现产生事件代码。
(6)声明处理事件的类(事件消费类)。
(7)在事件消费类中声明事件处理方法。
(8)在事件消费类中订阅或取消事件。
(一)结果分析与总结:
(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运算符(参数表)
转换代码体
}[;
]
教教师签名:
年 月 日