已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
池州学院数学计算机科学系实验报告专业:计算机科学与技术 班级: 12级计本 实验课程: 类和对象 姓名: 罗玉萍 学号: 120312147 实验室:_博采北101 实验时间: 2013/4/26 指导教师签字: 彭秀芳 成绩: 实验三 类和对象一、实验目的与要求1. 学习类、成员函数、对象的定义方法。2. 学习使用构造函数和析构函数。3. 学习使用静态成员、内联成员函数。4. 掌握this指针的使用方法。5. 掌握对象成员的使用方法。6. 掌握多文件结构的程序设计方法。7. 进一步熟悉VC+ 6.0的编译连接过程,掌握VC+ 6.0的调试方法。二、实验环境PC机、XP操作系统、Visual C+ 6.0三、实验内容1. 阅读程序,预测功能,再上机编辑、运行该程序,以验证自己的预测。(1)理解拷贝构造函数的目的和调用。在三种情况下,系统自动调用拷贝构造函数第一种情况:当用类的一个对象去初始化该类的另一个对象时;第二种情况:如果函数的形参是类的对象,调用函数时,进行形参和实参结合时;第三种情况:如果函数的返回值是类的对象,函数执行完成返回调用者时。以下程序都是定义一个屏幕上的点类,该类具有x,y坐标属性。【程序1】#includeusing namespace std;class Point public:Point(int xx = 0, int yy = 0)X = xx; Y = yy;cout调用构造函数n;Point(Point &p);int GetX() return X; int GetY() return Y; private:int X,Y;Point:Point(Point &p)X=p.X;Y=p.Y;cout调用拷贝构造函数n;void main()Point A(3,4); /a行Point B(A); /b行coutB.GetX()n;思考:(a)将b行改写为Point B = A; 程序输出结果会有变化吗? (b)将b行改写为Point B; B = A; 程序输出结果会有变化吗?【程序2】#includeusing namespace std;class Point public:Point(int xx = 0,int yy = 0)X = xx; Y = yy;cout调用构造函数n;Point(Point &p);int GetX() return X;int GetY() return Y;private:int X,Y;Point:Point(Point &p)X = p.X;Y = p.Y;cout调用拷贝构造函数n;void fun1(Point p)coutp.GetX()n;void main()Point A(4,5); /a行Point B(A); /b行coutB.GetX()n;fun1(B); /调用拷贝构造函数,实现形参和实参结合【程序3】#includeusing namespace std;class Point public:Point(int xx=0,int yy=0)X=xx;Y=yy;cout调用构造函数n;Point(Point &p);int GetX() return X;int GetY() return Y;private:int X,Y;Point:Point(Point &p)X=p.X;Y=p.Y;cout调用拷贝构造函数n;Point fun2()Point Temp(10,20); /调用构造函数return Temp; void main()Point A(4,5); /a行Point B(A); /b行coutB.GetX()n;B=fun2();coutB.GetX()n; (2) 创建一个雇员类,该类中数据成员有姓名、家庭住址和邮政编码等,其功能有修改姓名、显示数据信息,要求其功能函数的原型放在类定义体中。#includeusing namespace std;class Employeepublic:Employee(char *pName=,char *pAddress=,char *pPostalcode=)name = new char(strlen(pName)+1);strcpy(name,pName);address = new char(strlen(pAddress)+1);strcpy(address,pAddress);strcpy(postalcode,pPostalcode);void modifyName(char *pName)strcpy(name,pName);void modifyAddress(char *pAddress)strcpy(address,pAddress);void modifyPostalcode(char *pPostalcode)strcpy(postalcode,pPostalcode);void display()cout姓名:namet地址:addresst邮编:postalcodeendl;private:char *name;char *address; char postalcode7;int main()Employee em3=Employee(李琳,张家口,075000),Employee(张强,北京,100011),Employee(王明,天津,300232);for(int i=0;i3;i+)emi.display();em1.modifyName(张晓强);cout张强改名为张晓强,第二个雇员的信息为:endl;em1.display(); return 0;思考:为什么将姓名、家庭住址设计为指针类型?邮政编码设计为数组类型?2. 编写程序建立一个矩阵类Array,存储一个的矩阵并能在矩阵中查找数据。要求如下:(a)私有数据成员int px44:存储一个矩阵的值。int n: 矩阵的行数。(b)公有数据成员int x:存储根据查找要求在矩阵中要找到的某数。int im,jm:存储该数所在的行、列值。(c) 公有成员函数构造函数:初始化n的值为,x、im、jm为。void input(int a4):将一个矩阵赋给该对象中的数组。void find():在该对象存储的矩阵中查找值最小的数,保存该数及该数所在的行、列值到x,im,jm中。void print():按行输出矩阵的值(d)编写一个程序测试该类,使用以下测试数据,输出矩阵的值,查找值最小的数并输出x、im、jm的值。3. 熟悉多文件程序(1)在实际程序设计中,一个源程序按照结构可以划分为3个文件:类声明文件(*.h文件)、类实现文件(*.cpp )和类的使用文件(*.cpp,主函数文件)。 类声明文件(*.h文件): 将类的声明部分放在类声明文件(头文件)中,这就形成了类的public接口,向用户提供调用类成员函数所需的函数原型。 类实现文件(*.cpp ): 将类成员函数的定义放在类实现文件中,这就形成了类的实现方法。 类的使用文件(*.cpp,主函数文件): 将类的使用部分(通常是主程序)放在类使用文件中, 这样可以清晰地表示出本程序所要完成的工作。 (2)尝试完成一个C+多文件程序的开发过程。先依据之前学习的内容创建一个新的空工程,然后依次在该工程中添加下列文件:/文件1 student.h (类的声明部分)#includeusing namespace std;class Studentpublic: /类的外部接口 Student(char *name1,char *stu_no1,float score1); /声明构造函数 Student(); /声明析构函数 void modify(float score1); /声明数据修改函数 void show(); /声明数据输出函数private: char *name; /学生姓名 char *stu_no; /学生学号 float score; /学生成绩;/文件2 student.cpp (类的实现部分)#include student.h /包含类的声明文件Student:Student(char *name1,char *stu_no1,float score1) name=new charstrlen(name1)+1; /构造函数的实现 strcpy(name,name1); stu_no=new charstrlen(stu_no1)+1; strcpy(stu_no,stu_no1); score=score1; Student:Student() /析构函数的实现 delete name; delete stu_no; void Student:modify(float score1)/数据修改函数的实现 score=score1; void Student:show() /数据输出函数的实现 coutname: nameendl; coutstu_no: stu_noendl; coutscore: scoreendl; /文件3 studentmain.cpp (类的使用部分)#include student.h /包含类的声明文件int main() Student stu1(Liming,20080201,90); /定义类Student的对象stu1,调用stu1的构造函数,初始化对象stu1 stu1.show(); /调用stu1的成员函数show,显示stu1的数据 stu1.modify(88); /调用stu1的成员函数modify,修改stu1的数据 stu1.show(); /调用stu1的成员函数show,显示stu1修改后的数据 return 0;四、实验步骤1. 【程序1】#includeusing namespace std;class Point public:Point(int xx = 0, int yy = 0)X = xx; Y = yy;cout调用构造函数n;Point(Point &p);int GetX() return X; int GetY() return Y; private:int X,Y;Point:Point(Point &p)X=p.X;Y=p.Y;cout调用拷贝构造函数n;void main()Point A(3,4); /a行Point B(A); /b行coutB.GetX()n;(a) #includeusing namespace std;class Point public:Point(int xx = 0, int yy = 0)X = xx; Y = yy;cout调用构造函数n;Point(Point &p);int GetX() return X; int GetY() return Y; private:int X,Y;Point:Point(Point &p)X=p.X;Y=p.Y;cout调用拷贝构造函数n;void main()Point A(3,4); /a行Point B=A; /b行coutB.GetX()n;(b) #includeusing namespace std;class Point public:Point(int xx = 0, int yy = 0)X = xx; Y = yy;cout调用构造函数n;Point(Point &p);int GetX() return X; int GetY() return Y; private:int X,Y;Point:Point(Point &p)X=p.X;Y=p.Y;cout调用拷贝构造函数n;void main()Point A(3,4); /a行Point B; B=A; /b行coutB.GetX()n;【程序2】#includeusing namespace std;class Point public:Point(int xx = 0,int yy = 0)X = xx; Y = yy;cout调用构造函数n;Point(Point &p);int GetX() return X;int GetY() return Y;private:int X,Y;Point:Point(Point &p)X = p.X;Y = p.Y;cout调用拷贝构造函数n;void fun1(Point p)coutp.GetX()n;void main()Point A(4,5); /a行Point B(A); /b行coutB.GetX()n;fun1(B); /调用拷贝构造函数,实现形参和实参结合【程序3】#includeusing namespace std;class Point public:Point(int xx=0,int yy=0)X=xx;Y=yy;cout调用构造函数n;Point(Point &p);int GetX() return X;int GetY() return Y;private:int X,Y;Point:Point(Point &p)X=p.X;Y=p.Y;cout调用拷贝构造函数n;Point fun2()Point Temp(10,20); /调用构造函数return Temp; void main()Point A(4,5); /a行Point B(A); /b行coutB.GetX()n;B=fun2();coutB.GetX()n;#includeusing namespace std;class Employeepublic:Employee(char *pName=,char *pAddress=,char *pPostalcode=)name = new char(strlen(pName)+1);strcpy(name,pName);address = new char(strlen(pAddress)+1);strcpy(address,pAddress);strcpy(postalcode,pPostalcode);void modifyName(char *pName)strcpy(name,pName);void modifyAddress(char *pAddress)strcpy(address,pAddress);void modifyPostalcode(char *pPostalcode)strcpy(postalcode,pPostalcode);void display()cout姓名:namet地址:addresst邮编:postalcodeendl;private:char *name;char *address; char postalcode7;int main()Employee em3=Employee(李琳,张家口,075000),Employee(张强,北京,100011),Employee(王明,天津,300232);for(int i=0;i3;i+)emi.display();em1.modifyName(张晓强);cout张强改名为张晓强,第二个雇员的信息为:endl;em1.display(); return 0;2#include#includeusing namespace std;class Arraypublic:int x; /存储根据查找要求在矩阵中要找到的某数int im,jm; /存储该数所在的行、列值Array();void input(int a4); /将一个矩阵赋给该对象中的数组 void find(); /在该对象存储的矩阵中查找值最小的数 void print(); private
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论