




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+面向对象程序设计实验内容实验1 C+程序设计初步1、实验目的(1)了解在C+编译系统(Visual C+6.0)上如何编辑、编译、连接和运行一个C+程序。(2)通过运行简单的C+程序,初步了解C+源程序的结构和特点。(3)掌握简单C+程序的编写和调试方法。(4)掌握重载函数的定义方法。(5)能正确使用引用型变量。2、实验内容和步骤(1)在Visual C+环境下编译和运行C+程序先进入Visual C+6.0环境。在自己指定的子目录中建立一个名为test.cpp的新文件。从键盘输入以下程序int main()int a,b;c=a+b;cout “a+b=”a+b;选择BuildCompile test.cpp命令,对此源程序进行编译。观察和分析编译信息。根据编译信息指出的错误,修改程序。再进行编译,如果还有错,再重复此过程,直到编译不出错为止。选择BuildBuild test.exe命令,对程序进行连接,如果不出错,就会生成可执行程序test.exe。选择BuildExecute test.exe命令,执行可执行程序test.exe。观察屏幕的变化。在输出窗口应显示程序运行结果。分析结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上和步骤。改过后的程序:#includeusing namespace std;int add(int x,int y)int z;z=x+y;return(z);int main() int a,b,c; cinab; c=add(a,b); couta+b=cendl; return 0;实验2 C+对C的扩充(2)编一个程序,用来求2个或3个正整数中的最大数。#includeusing namespace std;int max2(int x,int y);int max3(int x,int y,int z);int main()int a,b,c,max;coutab;max=max2(a,b); cout两者中的最大数为: maxendl; coutabc;max=max3(a,b,c); cout三者中的最大数为: maxy)m=x;else m=y;return m;int max3(int x,int y,int z)int m;if(xy&xz)m=x;if(yz&yx)m=y;if(zx&zy)m=z;return m;(3)对3个变量按由小到大顺序排序,要求使用变量的引用。#includeusing namespace std;void main()int a,b,c,t;coutabc;if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;couta b cendl;编写一个程序,用同一个函数名对10个数据进行从小到大的排序,数据类型可以是整形,单精度型、双精度型。#includeusing namespace std;void main() int i,j; int a10,b11; cout请输入10个数: endl;/输入10个数 for(i=0;iai; for(i=0;i10;i+)/对这10个数进行排序 for(j=0;jaj+1) b10=aj; aj=aj+1; aj+1=b10; for(i=0;i10;i+)/输出排序后的结果 coutai ; coutn;实验3 类和对象(一)1、实验目的(1)掌握声明类的方法,类和类的成员的的概念以及定义对象的方法。(2)初步掌握用类和对象编制基于对象的程序。(3)学习检查和调试基于对象的程序。2、实验内容(1)有以下程序:#include using namespace std;class Time /定义Time类public:/数据成员为公用的 int hour; int minute;int sec;int main( ) Time t1;/定义t1为Time类对象 cint1.hour;/输入设定的时间 cint1.minute; cint1.sec; coutt1.hour“:”t1.minute “:”t1.secendl;/输出时间 return 0;改写程序,要求:将数据成员改为私有的;将输入和输出的功能改为由成员函数实现;在类体内定义成员函数。#includeusing namespace std;class Timepublic: int hour;int minute;int sec;int main()Time t1,t2,t3;cint1.hour;cint2.minute;cint3.sec;coutt1.hour:t2.minute:t3.secendl;return 0;然后编译和运行程序。请分析什么成员应指定为公用的?什么成员应指定为私有的?什么函数最好放在类中定义?什么函数最好放在类外定义?(3)需要求3个长方柱的体积,请编一个基于对象的程序。数据成员包括length(长)、width(宽)、height(高)。要求用成员函数实现以下功能:由键盘分别输入3个长方柱的长、宽、高;计算长方柱的体积;输出3个长方柱的体积。#includeusing namespace std;class Squarepublic:void print(); void calc(); void display();private:int l;int w;int h;int v;void Square:print() cinl;cinw;cinh;void Square:calc() v=l*w*h;void Square:display()cout长方柱的体积为vendl;void main()Square s; s.print();s.calc(); s.display();请编程序,上机调试并运行。学时数:2学时实验4 类和对象(二)1、实验目的(1)进一步加深对类和对象的理解。(2)掌握类的构造函数和析构函数的概念和使用方法。(3)掌握对对象数组、对象的指针及其使用方法。(4)掌握友元的概念和使用。(5)了解类模板的使用方法。2、实验内容(1)有以下程序:#includeusing namespace std;class Date;class Timepublic:Time(int,int,int);void display(Date &);private:int hour;int minute;int sec;class Datepublic:Date(int,int,int);friend void Time:display(Date &);private:int month;int day;int year;Time:Time(int h,int m,int s)hour=h;minute=m;sec=s;void Time:display(Date &d)coutd.month/d.day/d.yearendl;couthour:minute:secendl;Date:Date(int m,int d, int y)month=m;day=d;year=y;int main()Time t1(10,13,56);Date d1(12,25,2004);t1.display(d1);return 0;请读者分析和运行此程序,注意友元函数Time:display的作用。将程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。修改后上机调试和运行。实验5 运算符重载1、实验目的(1)进一步了解运算符重载的概念和使用方法。(2)掌握几种常用的运算符重载的方法。(3)了解转换构造函数的使用方法。(4)了解在Visual C+6.0环境下进行运算符重载要注意的问题。2、实验内容事先编写好程序,上机调试和运行程序,分析结果。(1) 声明一个复数类Complex,重载运算符 “+”、 “-”、 “*”、 “/”,使之能用于复数的加、减、乘、除,运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积和商。complex.h文件:#include class complexprivate: double Re, Im; /复数的实部与虚部public: complex( ) Re = Im = 0; /不带参数的构造函数 complex( double r ) Re = r; Im = 0; /只置实部的构造函数 complex( double r, double i ) Re = r; Im = i; /分别置实部、虚部的构造函数 double getReal( ) return Re; /取复数实部 double getImag( ) return Im; /取复数虚部 void setReal( double r ) Re = r; /修改复数实部 void setImag( double i ) Im = i; /修改复数虚部 complex& operator = ( complex& ob) Re = ob.Re; Im = ob.Im; /复数赋值 complex& operator + ( complex& ob ); /重载函数:复数四则运算 complex& operator - ( complex& ob ); complex& operator * ( complex& ob ); complex& operator / ( complex& ob ); void Display();complex.cpp文件:/复数类complex的相关服务的实现放在C+源文件complex.cpp中#include #include #include complex.hcomplex& complex : operator + ( complex & ob ) /重载函数:复数加法运算。complex * result = new complex ( Re + ob.Re, Im + ob.Im );return *result;complex& complex : operator - ( complex& ob ) /重载函数:复数减法运算complex * result = new complex ( Re - ob.Re, Im - ob.Im );return * result;complex& complex : operator * ( complex& ob ) /重载函数:复数乘法运算complex * result = new complex ( Re * ob.Re - Im * ob.Im, Im * ob.Re + Re * ob.Im );return *result;complex& complex : operator / ( complex& ob) /重载函数:复数除法运算double d = ob.Re * ob.Re + ob.Im * ob.Im;complex * result = new complex ( ( Re * ob.Re + Im * ob.Im ) / d,( Im * ob. Re - Re * ob.Im ) / d );return * result;void complex:Display() if(fabs(Re) 0.00001) cout 0.00001) if(Im =0.0) cout+fabs(Im)iendl; else cout-fabs(Im)iendl; 请思考:你编的程序能否用于一个整数与一个复数的算术运算?如4+(5-2i)(2) 声明一个复数类Complex,重载运算符 “+”,使之能用于复数的加法运算。参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。例如:c1+c2,i+c1, c1+i,均合法(设i为整数,c1,c2为复数)。运行程序,分别求两个复数之和、整数和复数之和。#include#include#includeclass Complexpublic:friend Complex operator + (const Complex& cmp1,const Complex& cmp2);friend Complex operator - (const Complex& cmp1,const Complex& cmp2);friend Complex operator * (const Complex& cmp1,const Complex& cmp2);friend Complex operator /(const Complex& cmp1,const Complex& cmp2);friend istream& operator (istream& ins,Complex& p);friend ostream& operator (istream& ins,Complex& p)insp.realp.imaginary;return ins;ostream& operator (ostream& outs,Complex& p)outsthe rational is p.real+p.imaginaryin;return outs;Complex:Complex()real=0;imaginary=0;Complex:Complex(double a)real=a;imaginary=0;Complex:Complex(double a,double bi) real=a; imaginary=bi;Complex operator +(const Complex& cmp1,const Complex& cmp2)Complex temp;temp.real=cmp1.real+cmp2.real;temp.imaginary=cmp1.imaginary+cmp2.imaginary;return temp;Complex operator -(const Complex& cmp1,const Complex& cmp2)Complex temp;temp.real=cmp1.real-cmp2.real;temp.imaginary=cmp1.imaginary-cmp2.imaginary;return temp;Complex operator *(const Complex& cmp1,const Complex& cmp2)Complex a;a.real=cmp1.real*cmp2.real+cmp1.imaginary*cmp2.imaginary;a.imaginary=cmp1.real*cmp2.imaginary+cmp1.imaginary*cmp2.real;return a;Complex operator /(const Complex& cmp1,const Complex& cmp2)Complex c;double a;a=cmp2.real*cmp2.real-cmp2.imaginary*cmp2.imaginary;c.real=cmp1.real*cmp2.real-cmp1.imaginary*cmp2.imaginary;c.real=c.real/a;c.imaginary=cmp2.real*cmp1.imaginary-cmp1.imaginary*cmp2.real;c.imaginary/=a;return a;int main()Complex x1,x2(3.4,4),x3;x3=x1*x2; coutx3; x3=x1+x2;coutx3;x3=x1-x2;coutx3;coutinput two number!x3;coutx3;return 0;(3)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符 “+”,使之能用于矩阵相加。如c=a+b。如c=a+b。#includeusing namespace std;class JZ public: JZ(int m,int n); friend JZ operator+(JZ& jz1,JZ& jz2); friend istream& operator (istream& input, JZ& jz); friend ostream& operator (ostream& output,JZ& jz); private: int *pt; int jz; int m; int n;JZ:JZ(int m,int n) m=2;n=3; int jzmn; JZ operator +(JZ& jz1,JZ& jz2) JZ jz3(2,3); jz1.pt=&(jz1.jz); jz2.pt=&(jz2.jz); jz3.pt=&(jz3.jz); for(int i=0;i2;i+) for(int j=0;j3;j+) *(jz3.pt)=*(jz1.pt)+*(jz2.pt); cout*(jz3.pt) ; jz3.pt+; jz2.pt+; jz1.pt+; coutendl; return jz3;ostream& operator (ostream& output,JZ& jz) jz.pt=&jz.jz; for(int i=0;i2;i+) for(int j=0;j3;j+) cout*(jz.pt) ; jz.pt+; cout(istream& input,JZ& jz) jz.pt=&jz.jz; for(int i=0;i2;i+) for(int j=0;j*(jz.pt); jz.pt+; jz.pt=&jz.jz; for(int i=0;i2;i+) for(int j=0;j3;j+) cout*jz.pt ; jz.pt+; couta; JZ b(2,3); cinb; JZ c(2,3); c=a+b; coutnumnamesex;void display( )cout “num: ”numendl;cout “name: ”nameendl;cout “sex: ”sexendl;private : /基类私有成员int num;string name;char sex; class Student1: public Student /以public方式声明派生类Student1public:void display_1( )cout“ num: ”numendl; /企图引用基类的私有成员,错误 cout“ name: ”nameendl; /企图引用基类的私有成员,错误 cout“ sex: ”sexendl; /企图引用基类的私有成员,错误 cout“ age: ”ageendl; /引用派生类的私有成员,正确 cout“ address: ”addrendl; /引用派生类的私有成员,正确private: int age; string addr; ;将程序片段补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。(2)有如下程序片段:#include #include using namespace std;class Student/声明基类public: /基类公用成员 void display( ); protected : /基类保护成员int num;string name;char sex;void Student:display( ) /定义基类成员函数cout “num:”numendl; cout “name:”nameendl; cout“sex: ”sexendl; class Student1: protected Student /用protected方式声明派生类Student1public:void display1( ); /派生类公用成员函数private:int age; /派生类私有数据成员string addr; /派生类私有数据成员;void Student1:display1( ) /定义派生类公用成员函数cout“num: ”numendl; /引用基类的保护成员,合法cout“name: ”nameendl; /引用基类的保护成员,合法cout“sex: ”sexendl; /引用基类的保护成员,合法cout“age: ”ageendl; /引用派生类的私有成员,合法cout“address: ”addrendl; /引用派生类的私有成员,合法int main( ) Student1 stud1; /stud1是派生类Student1类的对象 stud1.display1( ); /合法,display1是派生类中的公用成员函数 stud1.num=10023; /错误,外界不能访问保护成员return 0; 将以上程序程序修改、补充,写成一个完整、正确的程序,用保护继承方式。在程序中应包括输入数据的函数。(3)修改上面第(2)题的程序,改为用公用继承方式。上机调试程序,使之能正确运行并得到正确的结果。(4)分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。在Teacher_Cadre(教师兼干部)中还包含数据成员wages(工资)。对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。学时数:2学时实验7 多态性与虚函数1、实验目的(1)了解多态性的概念。(2)了解虚函数的作用及使用方法。(3)了解静态关联和动态关联的概念和用法。(4)了解纯虚函数和抽象类的概念和用法。2、实验内容事先编写好程序,上机调试和运行程序,分析结果。(1)声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。(2)有如下程序:#include using namespace std;class Point/定义基类Point类public: Point( ) /Point类构造函数 Point()cout“executing Point destructor”endl; /Point类析构函数;class Circle:public Point /定义派生类Circle类public: Circle( ) /Circle类构造函数 Circle( )coutexecuting Circle destructorc,b+ca,a+cb编写程序,输入a,b,c,检查a,b,c是否满足以上条件,如不满足,由cerr输出有关出错信息。#includeusing na
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 什么叫居间合同范本
- 2025社区工作人员资格考试试题及参考答案
- 2025消毒灭菌考试试题及答案
- 院感竞赛试题消毒卫生标准试题(附答案)
- 急救护理学副主任护师考试模拟试题及答案
- 叉车安全知识培训试题(含答案)
- 管理学基础模拟试题(附答案)
- 医学高级职称试题(附答案)
- 2025年舞蹈知识竞赛试题及答案
- 2025酒吧线上线下联合营销推广合同
- 19.《只有一个地球》-课前预习单-小学语文六年级上册课前
- 高中英语:倒装句专项练习(附答案)
- 【新教材】部编版小学道德与法治四年级上册-全册课件
- DB65-T 4762-2023 油田地面工程建设节能技术规范
- 2024至2030年中国智慧用电产业“十四五”市场预测与发展规划分析报告
- 输血治疗中的大数据分析
- 《旅游经济学(第3版)》全套教学课件
- 大学生心理健康与发展(高等院校心理健康教育)全套教学课件
- 人教版高一下学期期末考试数学试卷与答案解析(共五套)
- 《福建省建筑工程施工文件管理规程2》
- 研发项目策划书
评论
0/150
提交评论