C++面向对象程序设计实验内容.docx
《C++面向对象程序设计实验内容.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计实验内容.docx(23页珍藏版)》请在冰豆网上搜索。
![C++面向对象程序设计实验内容.docx](https://file1.bdocx.com/fileroot1/2023-4/18/362a7d5a-ab9d-4d94-aa70-d5a891530b61/362a7d5a-ab9d-4d94-aa70-d5a891530b611.gif)
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(xx:
y;}
private:
numtypex,y;
};
intmain()
{Comparecmp1(3,7);//定义对象cmp1,用于两个整数的比较
cout<cout<Comparecmp2(45.78,93.6);//定义对象cmp2,用于两个浮点数的比较
cout<cout<Comparecmp3(′a′,′A′);//定义对象cmp3,用于两个字符的比较
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形式的复数,在程序中可以识别出实部虚部并正确赋值。
(