1、罗玉萍实验报告三12147池州学院数学计算机科学系实验报告专业:计算机科学与技术 班级: 12级计本 实验课程: 类和对象 姓名: 罗玉萍 学号: 120312147 实验室:_博采北101 实验时间: 2013/4/26 指导教师签字: 彭秀芳 成绩: 实验三 类和对象一、实验目的与要求1. 学习类、成员函数、对象的定义方法。2. 学习使用构造函数和析构函数。3. 学习使用静态成员、内联成员函数。4. 掌握this指针的使用方法。5. 掌握对象成员的使用方法。6. 掌握多文件结构的程序设计方法。7. 进一步熟悉VC+ 6.0的编译连接过程,掌握VC+ 6.0的调试方法。二、实验环境PC机、X
2、P操作系统、Visual C+ 6.0三、实验内容1. 阅读程序,预测功能,再上机编辑、运行该程序,以验证自己的预测。(1)理解拷贝构造函数的目的和调用。在三种情况下,系统自动调用拷贝构造函数第一种情况:当用类的一个对象去初始化该类的另一个对象时;第二种情况:如果函数的形参是类的对象,调用函数时,进行形参和实参结合时;第三种情况:如果函数的返回值是类的对象,函数执行完成返回调用者时。以下程序都是定义一个屏幕上的点类,该类具有x,y坐标属性。【程序1】#includeusing namespace std;class Point public:Point(int xx = 0, int yy =
3、 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】#incl
4、udeusing 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
5、(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 Te
6、mp(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
7、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(p
8、ostalcode,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张强改名为张晓强
9、,第二个雇员的信息为: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():在该对象存储的矩
10、阵中查找值最小的数,保存该数及该数所在的行、列值到x,im,jm中。void print():按行输出矩阵的值(d)编写一个程序测试该类,使用以下测试数据,输出矩阵的值,查找值最小的数并输出x、im、jm的值。3. 熟悉多文件程序(1)在实际程序设计中,一个源程序按照结构可以划分为3个文件:类声明文件(*.h文件)、类实现文件(*.cpp )和类的使用文件(*.cpp,主函数文件)。 类声明文件(*.h文件): 将类的声明部分放在类声明文件(头文件)中,这就形成了类的public接口,向用户提供调用类成员函数所需的函数原型。 类实现文件(*.cpp ): 将类成员函数的定义放在类实现文件中,这
11、就形成了类的实现方法。 类的使用文件(*.cpp,主函数文件): 将类的使用部分(通常是主程序)放在类使用文件中, 这样可以清晰地表示出本程序所要完成的工作。 (2)尝试完成一个C+多文件程序的开发过程。先依据之前学习的内容创建一个新的空工程,然后依次在该工程中添加下列文件:/文件1 student.h (类的声明部分)#includeusing namespace std;class Studentpublic: /类的外部接口 Student(char *name1,char *stu_no1,float score1); /声明构造函数 Student(); /声明析构函数 void m
12、odify(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 ch
13、arstrlen(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 (类的使用部分)#i
14、nclude 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 Po
15、int 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 publ
16、ic: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(
17、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
18、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); /调用拷贝构造函数,实现形参和实参结合【
19、程序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,
20、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(postal
21、code,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; cha
22、r 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; /存储根据查找要求在矩阵中要找到的某
23、数 int im,jm; /存储该数所在的行、列值 Array(); void input(int a4); /将一个矩阵赋给该对象中的数组 void find(); /在该对象存储的矩阵中查找值最小的数 void print(); private: int px44; /存储一个矩阵的值。 int n; /矩阵的行数arr;Array:Array() x=0; n=4; im=0; jm=0; void Array:input(int a4) for(int i=0;i4;i+) for(int j=0;j4;j+) pxij=aij; void Array:print() cout矩阵信息
24、为:endl; for(int i=0;i4;i+) for(int j=0;j4;j+) coutsetw(3)pxij; coutendl; coutendl; cout其中最小的数为:xendl; cout该数所在行数为:imendl 该数所在列数为:jmendl;void Array:find() x=px00; for(int i=0;i4;i+) for(int j=0;j4;j+) if(pxijx) x=pxij; im=i+1; jm=j+1; void main() int a44; cout请输入(4*4)矩阵信息:endl; for(int i=0;i4;i+) for(int j=0;jaij; arr.input(a); arr.find(); arr.print();五、实验结果1. 【程序1】(a)程序结果不会有变化(b)程序结果会发生变化【程序2】【程序3】(2)答:姓名和地址设为指针类型是因为指针传递时双向的,使得调用的函数也能使内容改变。邮政编码设为数组类型是因为邮政编码的第一个数可能是0,这样就能避免0不被显示出来。2.六、实验心得预测时,出现错误,与调试的结果不同。找出自己哪里出错了。在编写4*4的矩阵时,程序出现了很多问题,输出方法编写也出现错误,说明这方面还不太熟,要看书,多多练习。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1