C++面向对象程序设计实验内容.docx
- 文档编号:12358024
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:23
- 大小:29.42KB
C++面向对象程序设计实验内容.docx
《C++面向对象程序设计实验内容.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计实验内容.docx(23页珍藏版)》请在冰豆网上搜索。
C++面向对象程序设计实验内容
《C++面向对象程序设计》实验内容
总学时:
24学时
实验1C++程序设计初步
1、实验目的
(1)了解在C++编译系统(VisualC++6.0)上如何编辑、编译、连接和运行一个C++程序。
(2)通过运行简单的C++程序,初步了解C++源程序的结构和特点。
(3)掌握简单C++程序的编写和调试方法。
(4)掌握重载函数的定义方法。
(5)能正确使用引用型变量。
2、实验内容和步骤
(1)在VisualC++环境下编译和运行C++程序
①先进入VisualC++6.0环境。
②在自己指定的子目录中建立一个名为test.cpp的新文件。
③从键盘输入以下程序
intmain()
{
inta,b;
c=a+b;
cout>>“a+b=”>>a+b;
}
选择Build→Compiletest.cpp命令,对此源程序进行编译。
观察和分析编译信息。
⑤根据编译信息指出的错误,修改程序。
再进行编译,如果还有错,再重复此过程,直到编译不出错为止。
⑥选择Build→Buildtest.exe命令,对程序进行连接,如果不出错,就会生成可执行程序test.exe。
⑦选择Build→Executetest.exe命令,执行可执行程序test.exe。
观察屏幕的变化。
在输出窗口应显示程序运行结果。
⑧分析结果是否正确,如果不正确或认为输出格式不理想,可以修改程序,然后重新执行以上④和⑧步骤。
(2)编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。
用重载函数实现。
(3)对3个变量按由小到大顺序排序,要求使用变量的引用。
学时数:
2学时
实验2类和对象
(一)
1、实验目的
(1)掌握声明类的方法,类和类的成员的的概念以及定义对象的方法。
(2)初步掌握用类和对象编制基于对象的程序。
(3)学习检查和调试基于对象的程序。
2、实验内容
(1)有以下程序:
#include
usingnamespacestd;
classTime//定义Time类
{public:
//数据成员为公用的
inthour;
intminute;
intsec;
};
intmain()
{Timet1;//定义t1为Time类对象
cin>>t1.hour;//输入设定的时间
cin>>t1.minute;
cin>>t1.sec;
cout< ”< ”< return0; } 改写程序,要求: ①将数据成员改为私有的; ②将输入和输出的功能改为由成员函数实现; ③在类体内定义成员函数。 然后编译和运行程序。 请分析什么成员应指定为公用的? 什么成员应指定为私有的? 什么函数最好放在类中定义? 什么函数最好放在类外定义? (2)分别给出如下的3个文件: ①含类定义的头文件student.h, (这是头文件,在此文件中进行类的声明) classStudent//类声明 {public: voiddisplay();//公用成员函数原型声明 private: intnum; charname[20]; charsex; }; ② //在此文件中进行函数的定义 #include #include“”//不要漏写此行,否则编译通不过 voidStudent: : display()//在类外定义display类函数 {cout<<“num: ”< cout<<“name: ”< cout<<“sex: ”< } ③。 为了组成一个完整的源程序,应当有包括主函数的源文件: 主函数模块 #include #include“”//将类声明头文件包含进来 intmain() {Studentstud;//定义对象 stud.display();//执行stud对象的display函数 return0; } 请完善该程序,在类中增加一个对数据成员赋初值的成员函数set_value。 上机调试并运行。 (3)需要求3个长方柱的体积,请编一个基于对象的程序。 数据成员包括length(长)、width(宽)、height(高)。 要求用成员函数实现以下功能: ①由键盘分别输入3个长方柱的长、宽、高; ②计算长方柱的体积; ③输出3个长方柱的体积。 请编程序,上机调试并运行。 学时数: 2学时 实验3类和对象 (二) 1、实验目的 (1)进一步加深对类和对象的理解。 (2)掌握类的构造函数和析构函数的概念和使用方法。 (3)掌握对对象数组、对象的指针及其使用方法。 (4)掌握友元的概念和使用。 (5)了解类模板的使用方法。 2、实验内容 (1)有以下程序 #include classStudent {public: Student(intn,floats): num(n),score(s){} voidchange(intn,floats){num=n;score=s;} voiddisplay(){cout< private: intnum; floatscore; }; voidmain() {Studentstud(101,78.5); stud.display(); stud.change(101,80.5); stud.display(); } ①阅读此程序,分析其执行过程,然后上机运行,对比输出结果。 ②修改上面的程序,增加一个fun函数,改写main函数。 在main函数中调用fun函数,在fun函数中调用change和display函数。 在fun函数中使用对象的引用(Student&)作为形参。 (2)商店销售某一商品,商店每天公布统一的折扣(discount)。 同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。 现已知当天3个销售员销售情况为 销货员号(num)销货件数(quantity)销货单价(price) 1015 请编程序,计算出当日此商品的总销售款sum以及每件商品的平均售价。 要求用静态数据成员和静态成员函数。 (提示: 将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。 (3)有以下程序: #include usingnamespacestd; classDate;//对Date类的提前引用声明 classTime//定义Time类 {public: Time(int,int,int); voiddisplay(Date&);//display是成员函数,形参是Date类对象的引用 private: inthour; intminute; intsec; }; classDate//声明Date类 {public: Date(int,int,int); friendvoidTime∷display(Date&);//声明Time中的display函数为友元成员函数 private: intmonth; intday; intyear; }; Time∷Time(inth,intm,ints)//类Time的构造函数 {hour=h; minute=m; sec=s; } voidTime∷display(Date&d)//display的作用是输出年、月、日和时、分、秒 {cout< cout< ”< ”< } Date∷Date(intm,intd,inty)//类Date的构造函数 {month=m; day=d; year=y; } intmain() {Timet1(10,13,56);//定义Time类对象t1 Dated1(12,25,2004);//定义Date类对象d1 t1.display(d1);//调用t1中的display函数,实参是Date类对象d1 return0; } 请读者分析和运行此程序,注意友元函数Time: : display的作用。 将程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。 在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。 修改后上机调试和运行。 (4)有以下使用类模板程序: #include usingnamespacestd; template classCompare {public: Compare(numtypea,numtypeb) {x=a;y=b;} numtypemax() {return(x>y)? x: y;} numtypemin() {return(x x: y;} private: numtypex,y; }; intmain() {Compare cout< cout< Compare cout< cout< Compare cout< cout< return0; } ①运行此程序,体会类模板的作用。 ②将它改写为在类模板外定义各成员函数。 学时数: 2学时 实验4运算符重载 1、实验目的 (1)进一步了解运算符重载的概念和使用方法。 (2)掌握几种常用的运算符重载的方法。 (3)了解转换构造函数的使用方法。 (4)了解在VisualC++6.0环境下进行运算符重载要注意的问题。 2、实验内容 事先编写好程序,上机调试和运行程序,分析结果。 (1)声明一个复数类Complex,重载运算符“+”、“-”、“*”、“/”,使之能用于复数的加、减、乘、除,运算符重载函数作为Complex类的成员函数。 编程序,分别求两个复数之和、差、积和商。 请思考: 你编的程序能否用于一个整数与一个复数的算术运算? 如4+(5-2i) (2)声明一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。 参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。 例如: c1+c2,i+c1,c1+i,均合法(设i为整数,c1,c2为复数)。 运行程序,分别求两个复数之和、整数和复数之和。 (3)有两个矩阵a和b,均为2行3列。 求两个矩阵之和。 重载运算符“+”,使之能用于矩阵相加。 如c=a+b。 如c=a+b。 (4)声明一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别).。 编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。 可以设想为: 一位大学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的一部分。 学时数: 2学时 实验5: 继承和派生 1、实验目的 (1)了解继承在面向对象程序设计中的重要作用。 (2)进一步理解继承与派生的概念。 (3)掌握通过继承派生出一个新的类的方法。 (4)了解虚基类的作用和用法。 2、实验内容 事先编写好程序,上机调试和运行程序,分析结果。 (1)有如下类定义: classStudent//声明基类 {public: //基类公用成员 voidget_value() {cin>>num>>name>>sex;} voiddisplay() {cout<<“num: ”< cout<<“name: ”< cout<<“sex: ”< private: //基类私有成员 intnum; stringname; charsex; }; classStudent1: publicStudent//以public方式声明派生类Student1 {public: voiddisplay_1() {cout<<“num: ”< cout<<“name: ”< cout<<“sex: ”< cout<<“age: ”< cout<<“address: ”< private: intage; stringaddr; }; 将程序片段补充和改写成一个完整、正确的程序,用公用继承方式。 在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。 (2)有如下程序片段: #include #include usingnamespacestd; classStudent//声明基类 {public: //基类公用成员 voiddisplay(); protected: //基类保护成员 intnum; stringname; charsex; }; voidStudent: : display()//定义基类成员函数 {cout<<“num: ”< cout<<“name: ”< cout<<“sex: ”< } classStudent1: protectedStudent//用protected方式声明派生类Student1 {public: voiddisplay1();//派生类公用成员函数 private: intage;//派生类私有数据成员 stringaddr;//派生类私有数据成员 }; voidStudent1: : display1()//定义派生类公用成员函数 {cout<<“num: ”< cout<<“name: ”< cout<<“sex: ”< cout<<“age: ”< cout<<“address: ”< } intmain() {Student1stud1;//stud1是派生类Student1类的对象 stud1.display1();//合法,display1是派生类中的公用成员函数 stud1.num=10023;//错误,外界不能访问保护成员 return0; } 将以上程序程序修改、补充,写成一个完整、正确的程序,用保护继承方式。 在程序中应包括输入数据的函数。 (3)修改上面第 (2)题的程序,改为用公用继承方式。 上机调试程序,使之能正确运行并得到正确的结果。 (4)分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。 要求: ①在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 ②在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。 在Teacher_Cadre(教师兼干部)中还包含数据成员wages(工资)。 ③对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。 ④在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。 学时数: 2学时 实验6多态性与虚函数 1、实验目的 (1)了解多态性的概念。 (2)了解虚函数的作用及使用方法。 (3)了解静态关联和动态关联的概念和用法。 (4)了解纯虚函数和抽象类的概念和用法。 2、实验内容 事先编写好程序,上机调试和运行程序,分析结果。 (1)声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。 将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。 (2)有如下程序: #include usingnamespacestd; classPoint//定义基类Point类 {public: Point(){}//Point类构造函数 ~Point(){cout<<“executingPointdestructor”< }; classCircle: publicPoint//定义派生类Circle类 {public: Circle(){}//Circle类构造函数 ~Circle(){cout<<″executingCircledestructor″< private: intradius; }; intmain() {Point*p=newCircle;//用new开辟动态存储空间 deletep;//用delete释放动态存储空间 return0; } 要求作如下修改,并作必要的讨论。 ①把构造函数修改为带参数的函数,在建立对象时初始化。 ②在main函数中另设一个指向Circle类对象的指针变量,使它指向堆内存中的Circle对象。 运行程序,分析结果。 ③不作第②点的修改而将析构函数声明为virtual,运行程序,分析结果。 (3)声明抽象基类Shape,由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。 学时数: 2学时 实验7输入输出流 1、实验目的 (1)深入理解C++的输入输出的含义与其实现方法。 (2)掌握标准输入输出流的应用,包括格式输入输出。 (3)掌握对文件的输入输出操作。 2、实验内容 事先编写好程序,上机调试和运行程序,分析结果。 (1)输入三角形的三边a,b,c,计算三角形的面积的公式是 形成三角形的条件是: a+b>c,b+c>a,a+c>b 编写程序,输入a,b,c,检查a,b,c是否满足以上条件,如不满足,由cerr输出有关出错信息。 (2)从键盘输入一批数值,要求保留3位小数,在输出时上下行小数点对齐。 ①用控制符控制输出格式; ②用流成员函数控制输出格式。 (3)建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作: ①从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数); ②从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面; ③从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)。 学时数: 2学时 实验8C++工具 1、实验目的 (1)学会使用C++的异常处理机制进行程序的调试 (2)学会使用命名空间解决名字冲突。 2、实验内容 事先编写好程序,上机调试和运行程序,分析结果。 (1)求一元二次方程式 的实根,如果方程没有实根,则利用异常处理机制输出有关警告信息。 (2)学校的人事部门保存了有关学生的部分数据(学号、姓名、年龄、住址),教务部门也保存了学生的另外一些数据(学号、姓名、性别、成绩),两个部门分别编写了本部门的学生数据管理程序,其中都用了Student作为类名。 现在要求在全校的学生数据管理程序中调用这两个部门的学生数据,分别输出两种内容的学生数据。 要求用ANSIC++编程,使用命名空间。 学时数: 2学时 实验9电话簿管理程序 1、实验目的 综合运用面向对象程序设计的基础知识,设计一个小型的应用程序,提高解决问题的能力。 2、实验内容 设计一个电话簿管理程序,具有加入、删除、显示、修改和查询联系人电话号码的功能。 学时数: 4学时 实验10复数计算器 1、实验目的 掌握面向对象程序设计方法和技巧,设计一个小型的应用程序,进一步提高解决问题的能力。 2、实验内容 (1)所设计的复数计算器可以进行+、-、*、+=、-=、*=、++、--、>=、<=、==、! =运算符,其中>=、<=是针对复数的模进行运算。 (2)设计输入重载函数,要求能接收从键盘输入a+bi形式的复数,在程序中可以识别出实部虚部并正确赋值。 (
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 实验 内容