类的设计和实现.docx

上传人:b****5 文档编号:7327226 上传时间:2023-01-23 格式:DOCX 页数:21 大小:228.88KB
下载 相关 举报
类的设计和实现.docx_第1页
第1页 / 共21页
类的设计和实现.docx_第2页
第2页 / 共21页
类的设计和实现.docx_第3页
第3页 / 共21页
类的设计和实现.docx_第4页
第4页 / 共21页
类的设计和实现.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

类的设计和实现.docx

《类的设计和实现.docx》由会员分享,可在线阅读,更多相关《类的设计和实现.docx(21页珍藏版)》请在冰豆网上搜索。

类的设计和实现.docx

类的设计和实现

     专业:

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运算符(参数表)

转换代码体

}[;]

教教师签名:

  年 月 日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1