版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验 1 类和对象1.1 实验目的和要求(1) 理解类和对象的概念,掌握声明类和定义对象的方法。(2) 掌握构造函数和析构函数的实现方法。(3) 初步掌握使用类和对象编制C+ 程序。(4) 掌握对象数组、对象指针和string 类的使用方法。(5) 掌握使用对象、对象指针和对象引用作为函数参数的方法。(6) 掌握类对象作为成员的使用方法。(7) 掌握静态数据成员和静态成员函数的使用方法。(8) 理解友元的概念和掌握友元的使用方法。1.2 实验内容和步骤1. 输入下列程序/test4-1.cpp#include<iostream>using namespace std。class C
2、oordinate public:Coordinate(int x1,int y1) x=x1 。y=y1 。Coordinate(Coordinate &p) 。Coordinate() cout<< ” Destructor is callededn”。 int getx()return x 。 int gety() return y 。 private:int x,y 。 。Coordinate:Coordinate(Coordinate &p) x=p.x 。y=p.y 。cout<< ”copy-initialization Construct
3、ou is calledn”。int main() Coordinate p1(3,4) 。Coordinate p2(p1) 。1/14Coordinate p3=p2 。cout<< ”p3=( “<<p3.getx()<< ” ,<<p3”.gety()<< ”)n”。return(0) 。(1) 写出程序的运行结果。(2) 将 Coordinate 类中带有两个参数的构造函数进行修改,在函数体内增添下述语句:cout<< ”Constructor is called.n ”。写出程序的运行结果,并解释输出结果。(
4、3)按下列要求进行调试:在主函数体内,添加下列语句:Coordinate p4 。Coordinata p5(2) 。调试程序时会出现什么错误?为什么?如何对已有的构造函数进行适当修改?( 4)经过以上第( 2)步和第( 3)步的修改后,结合运行结果分析:创建不同的对象时会调用不同的构造函数。2.设计一个 4*4 魔方程序,让魔方的各行值的和等于各列值的和,并且等于两对角线值的和。例如一下魔方:313525921191517131123727291各行、各列以及对角线值的和都是64.【提示】求 4*4 魔方的一般步骤如下:( 1)设置初始魔方的起始值和相邻元素之间的差值。例如上述魔方的初始魔方
5、的起始值( first )和相邻元素之间的差值(step)分别为:first=1step=2(2)设置初始魔方元素的值。例如上述魔方的初始魔方为:135791113151719212325272931(3)生成最终魔方。方法如下:求最大元素值与最小元素值的和sum,该实例的 sum 是:1+31=32用 32 减去初始魔方所有对角线上元素的值,然后将结果放在原来的位置,这样就可求得最终魔方。本例最终魔方如下:3135259211915171311232/14727291本题的魔方类magic 的参考框架如下:class magic public:void getdata() 。void set
6、firstmagic() 。void generatemagic() 。void printmagic() 。private:int m44 。int step。int first 。int sum 。 。3.设计一个用来表示直角坐标系的Location 类,在主程序中创建类Location 的两个对象A 和 B,要求 A 的坐标点在第 3 象限, B 的坐标在第 2 象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果:A(x1,y1),B(x2,y2)Distance1=d1Distance1=d2其中: x1、x2、 y1 、y2 为指定的坐标值,d1 和
7、 d2 为两个坐标点之间的距离。【提示】类 Location 的参考框架如下:class Location public:Location(double,double) 。double Getx()double Gety()double distance(Location &) 。friend double distance (Location &,Location &)。private:double x,y 。 。4.声明一个Student 类,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一
8、个成员函数account() 用于设置分数、累计学生成绩之和、累计学生人数,一个静态成员函数sum() 用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。在main 函数中,输入某班同学的成绩,并调用上述函数求出全班学生的成绩之和和平均分。5.使用 C+ 的 string 类,将5 个字符串按逆转后的顺序显示出来。例如,逆转前的5 个字符串是:GermanyJapanAmericaBritainFrance按逆转后的顺序输出字符串是:FranceBritainAmericaJapanGermany3/14实验 2 派生类与继承2.1 实验目的和要求(1) 掌握
9、派生类的声明方法和派生类构造函数的定义方法。(2) 掌握不同继承方式下,基类成员在派生类中的访问属性。(3) 掌握在继承方式下,构造函数与析构函数的执行顺序与构造规则。(4) 学习虚基类在解决二义性问题中的作用。2.2 实验内容与步骤·1.输入下列程序。/test4_1.cpp#include<iostream>using namespace std。class Basepublic:void setx(int i)x=i 。 Int getx()return x 。 public:int x 。 。class Derived:public Basepublic:void
10、 sety(int i)y=i 。 int gety()return y 。 void show()cout<< ”Base:x=”<<x<<endl 。public:inty 。 。int main()Derived bb 。bb,setx(16) 。bb.sety(25) 。bb.show() 。cout<< ”Base:x=”<<bb.x<<endl 。cout<< ”Derived:y= ”<<bb.y<<endl 。cout<< ”Base:x= ”<<
11、bb.getx()<<endl 。4/14cout<< ”Derived:y= ”<<bb.gety()<<endl 。return 0。(1) 写出程序的运行结果。(2) 按以下要求,对程序进行修改后再调试,指出调试中出错的原因。将基类Base 中数据成员x 的访问权限改为private 时,会出现哪些错误?为什么?将基类Base 中数据成员x 的访问权限改为protected 时,会出现哪些错误?为什么?在源程序的基础上,将派生类Derived 的继承方式改为private 时,会出现哪些错误?为什么?在源程序的基础上,将派生类Derived
12、 的继承方式改为protected 时,会出现哪些错误?为什么?2.编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类 Person,并作为学生类 Student 和教师类Teacher的基类。供参考的类结构如下:class Person. 。class Student:public Person. 。class Teacher:public Person. 。3.按要求阅读、编辑、编译、调试和运行以下程序。(1) 阅读、编辑、编译、调试和运行以下程序,并写出程
13、序的运行结果。/test4_3_1.cpp#include<iostream>#include<string>using namespace std。class MyArraypublic:MyArray(int leng)。MyArray。void Input() 。void Display(string) 。protected:int*alist 。int length 。 。MyArray:MyArray(int leng)if(leng<=0)cout<< ”error length ”。exit(1) 。5/14alist=new int l
14、eng 。length=leng 。if(alist=NULL)cout<< ”assign failure ”。exit(1) 。cout<< ”MyArray 类对象已创建。”<<endl 。MyArray:MyArray()delete alist 。cout<< ”MyArray 类对象被撤销。”<<endl 。void MyArray:Display(string str)int i 。int *p=alist 。cout<<str<<length<< ”个整数:“;for(i=0 。 i
15、<length 。 i+,p+)cout<<*p<< ”。cout<<endl 。void MyArray:Inputcout<< ”请键盘输入 ”<<length<< ”个整数 :”。int i 。int *p =alist 。for(i=0 。 i<length 。 i+,p+)cin>>*p 。int main()MyArray a(5) 。a.Input() 。a.Display( “显示已输入的”)。return 0。(2) 声明一个类 SortArray 继承类 MyArray, 在该类
16、中定义一个函数,具有将输入的整数从小到大进行排序的功能。【提示】在第( 1)步的基础上可增加下面的参考框架:class SortArray : public MyArray public:void Sort() 。SortArray(int leng):MyArray(leng)cout<< ”SortArray 类对象已创建。”<<endl 。virtual SortArray() 。6/14 。 SortArray:SortArray()cout<< ”SortArray 类对象被撤销。 ”<<endl 。void SortArray:Sor
17、t()/请自行编写Sort 函数的代码,将输入的整数从小到大排序。/并将主函数修改为:int main()SortArray a(5) 。s.Input() 。s.Display( “显示排序以前的”)。s.Sort()。s.Display( “显示排序以后的”)。return 0。声明一个类 ReArray 继承类 MyArray, 在该类中定义一个函数,具有将输入的整数进行倒置的功能。【提示】在第( 1)步的基础上可增加下面的参考框架:Class ReArray:public MyArrayPublic:Void reverse()。ReArray(int leng) 。Virtual R
18、eArray() 。 。请读者自行编写构造函数、析构函数和倒置函数ReArray, 以及修改主函数。(3) 声明一个类 AverArray 继承类 MyArray, 在该类中定义一个函数,具有求输入的整数平均值的功能。【提示】在第( 1)步的基础上增加下面的参考框架:class AverArray:public MyArrayPublic:AverArray(int leng) 。AverArray() 。Double Aver() 。 。请读者自行编写构造函数、析构函数和求平均值函数Aver (求解整数的平均值),以及修改主函数。(2) 声明一个NewArray类,同时继承了类SortArr
19、ay,ReArray和AverArray, 使得类NewArray 的对象同时具有排序、倒置和求平均值的功能。在继承的过程中声明 MyArray 为虚基类,体会虚基类在解决二义性问题中的作用。7/14实验 3 多态性3.1 实验目的和要求(1) 了解多态性的概念。(2) 掌握运算符重载的基本方法。(3) 掌握虚函数的定义和使用方法。(4) 掌握纯虚函数和抽象类的概念和用法。3.2 实验内容与步骤1.分析并调试下列程序,写出程序的输出结果,并解释输出结果。/test5_1.cpp#include<iostream>using namespace std。class Bpublic:v
20、irtual void f1 (double x)cout<< ”B:f1(double) ”<<x<<endl 。void f2(double x)cout<< ”B:f2(double) ”<<2*x<<endl 。void f3(double x)cout<< ”B:f3(double) ”<<3*x<<endl 。class D:public Bpublic:virtual void f1(double x)cout<< ”D:f1(double) ”<<
21、x<<endl 。void f2(double x)cout<< ”D:f2(double) ”<<2*x<<endl 。void f3(double x)cout<< ”D:f3(double) ”<<3*x<<endl 。 。int main()D d 。B*pb=&d 。D*pd=&d 。pb->f1(1.23) 。8/14pb->f1(1.23) 。pb->f2(1.23) 。pb->f3(1.23) 。pb->f3(3.14) 。return 0。2.编写
22、一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于0,分钟范围限制在 059 ,秒钟范围限制在059 秒。【提示】时间类 Timepublic:Time(int h=0,int m=0,int s=0) 。Time operator+(Time&) 。void disptime(string) 。private:int hourse。int minutes 。int seconds。 。3.给出下面的抽象基类 container。 class containerprotected: double
23、radius 。public:container(double radius1) 。 virtual double surface_area()=0 。 virtual double volume()=0 。 。要求建立3 个继承 container 的派生类cube、 sphere与 cylinder ,让每一个派生类都包含虚函数surface_area()和 volume() ,分别用来计算正方体、球体和圆柱体的表面积及体积。要求写出主程序,应用C+ 的多态性,分别计算边长为6.0 的正方体、半径为5.0 的球体,以及半径为5.0 和高为 6.0 的圆柱体的表面积和体积。4.编写一个程序,
24、用于进行集合的并、差和交运算。例如输入整数集合9 5 4 3 6 7和 2 4 6 9 ,计算出它们进行集合的并、差和交运算后的结果。【提示】i. 可用以下表达式实现整数集合的基本运算:s1+s2 两个整数集合的并运算s1-s2 两个整数集合的差运算s1*s2 两个整数集合的交运算ii. 参考以下 Set 类的框架,用于完成集合基本运算所需的各项功能。class setpublic:set:set()。9/14void set:input(int d) 。int set:length() 。int set:getd(int i) 。void set:disp() 。set set:operat
25、or+(set s1)。set set:operator-(set s1)。set set:operator*(set s1)。set set:operator=(set s1)。protected:int len 。int sMAX。 。10/14实验 4 模板与异常处理4.1 实验目的和要求( 1)正确理解模板的概念。( 2)掌握函数模板和类模板的声明和使用方法。( 3)学习简单的异常处理方法。4.2 实验内容和步骤1.分析并调试下列程序,写出运行结果并分析原因。( 1)/test6_1_1.cpp#include <iostream>using namespace std。t
26、emplate<typename T>T max (T x,T y) return x>y? x:y 。int max(int a,int b) return a>b? a:b 。double max (double a,double b) return a>b? a:b 。int main() cout<< ”max(3,7)is “<<max( 3,7)<<endl 。 return 0 。(2)/test6_1_2.cpp#include <iostream>using namespace std。int ma
27、x(int a,int b)return a>b? a:b 。double max (double a,double b)return a>b? a:b 。int main() cout<< ”max(3,7) is “<<max( 3,7)<<endl 。 return 0 。2. 编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小11/14元素的函数设计成函数模板。3. 编写一个程序,使用类模板对数组元素进行排序、倒置、查找和求和。【提示】设计一个类模板template <class Type>class A
28、rray. 。具有对数组元素进行排序、倒置、查找和求和功能,然后产生类型实参分别为int 型和double 型的两个模板类,分别对整型数组与双精度数组完成所要求的操作。4. 编写一个程序,求输入数的平方根。设置异常处理,对输入负数的情况给出提示。实验 5 C+ 的流类库与输入输出5.1 实验目的和要求( 1)掌握 C+ 格式化的输入输出方法。( 2)掌握重载运算符“ <<”和“ >>”的方法。( 3)掌握磁盘文件的输入输出方法。5.2 实验内容和步骤1. 下面给出的 test7_1_1.cpp 程序用于打印九九乘法表,但程序中存在错误。请上机调试,使得此程序运行后,能够输出如下所示的九九乘法表。*1234567891 12 2 43 3 6 94 4812165 510152025661218243036771421283542498816243240485664991827364554637281/test7_1_1.cpp#include <iostream>#include <iomanip>using namespace std。int main()int i,j。cout<< ” * ”。for(i=1。i<=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 股权投资合同(模板)
- 2024劳动合同管理制度劳动合同管理制度规定
- 2024的车辆租赁合同范本模板
- 2024自费出国留学中介服务合同示范文本
- 2024年多媒体制作及外包服务合同
- 酒类专卖店加盟协议
- 2024购房合同变更委托书
- 员工短期聘用合同书2024年
- 2024标准房屋买卖协议
- 技术开发合同书-合同样本
- 【工商企业管理专业实操实训报告2600字(论文)】
- HJ 636-2012 水质 总氮的测定 碱性过硫酸钾消解紫外分光光度法
- 主播薪资核算方案
- 机电仪运维中心巡检工作提升方案
- 10以内口算题每页50道
- 大学生职业生涯规划与就业指导(高校学生学习职业生涯规划与就业指导课程)全套教学课件
- 《道德与法治》三年级学情分析
- 校园禁烟承诺书(12篇)
- 国家开放大学《计算机网络》课程实验报告实验六-计算机网络综合性实-
- 学校教育统计工作计划方案
- 售后服务方案及运维方案
评论
0/150
提交评论