面向对象C++实验报告
面向对象程序设计-C++
上机实验报告
第一次:熟悉Visual C++开发环境及上机过程实验
实验时间: 2015 年3月 11 日实验室: S311
实验题目:
使用Visual C++ 6.0集成环境来编辑、编译并运行程序1:
#include
using namespace std;
class TAdd
{
public:
TAdd(int a,int b)
{
x=a;y=b;
cout<<"constructor."< cout< } ~TAdd() { cout<<"destructor."< cout< int add(){return x+y; } private: int x,y; }; int main() { TAdd p1(3,4); cout<<"x+y="< TAdd p2(30,40); cout<<"x+y="< return 0;} 实验目的: 1、了解和使用该相应的软件; 2、熟悉VC环境的基本命令和功能键; 3、熟悉常用的功能菜单命令; 4、会编译、链接、运行程序; 5、调试程序时若出现报错,能改正相应的错误; 6、学习使用VC++环境的帮助; 7、学习完整的C++程序开发过程; 8、理解简单的C++程序结构。 实验要求: 1.复习教材有关内容。 2.掌握VC控制台应用程序的开发、调试步骤。 3.完成实验报告。 实验主要步骤: 1、创建新工程 (1)单击菜单“文件/新建”,显示“新建:”对话框。 (2)在此对话框的列表栏中,选择“Win32 Console A pplication”(Win32控制 台应用程序”)。在“工程”栏中输入一个工程名。在位置文本框中选择工程所在的路径,单击“确定”按钮。 (3)在弹出的“Win32 Consol Application-Step 1 of 1” 对话框中选择An empty project单选项。然后单击“Finish”按钮。 (4)在“新建工程信息”对话框中单击“确认”按钮,完成工程创建过程。 2、创建C++源程序文件 (1)编辑C++源程序:编辑C++源程序时,选择“文件”菜单项,在弹出的子菜单中选择新建(热键为Ctrl+N)。 (2)选择“文件”选项卡,在此属性页中选择“C++ Source File”,单击“确定”。(3)在“C++源程序编辑”窗口下编辑C++源程序。在编辑窗口键入相应的C++源程序。 3.编译连接和运行源程序 (1)选择菜单项“编译”,出现“编译”的下拉菜单,在该下拉式菜单中选择“编译eg1-1.cpp”菜单项,这时系统开始对当前的源程序进行编译,在编译过程中,编译器会将错误信息显示在屏幕下方的“编译”窗口中。错误信息包括错误所在大致位置和错误的性质。用户可根据这些错误信息进行修改。 (2)编译无错误后,可进行连接生成可执行文件(.exe),这时选择“编译”下拉菜单中的“构件eg1-1.exe”选项。“编译”窗口出现如图1-8所示的信息说明编译连接成功,并生成以源文件名为名字的可执行文件(eg1-1.exe)。 (3)执行可执行文件的方法是选择“编译”菜单项中“执行eg1-1.exe”选项。这时,运行该可执行文件,并将结果显示在另外一个显示执行文件输出结果的窗口中。4.关闭工作区、打开工作区 单击菜单“文件/关闭工作区”,关闭工作区。 单击菜单“文件/打开工作区”,在弹出的对话框中选定“H:\C++实验\实验一\实验一.dsw”,单击“打开”按钮,则可打开工作区,对已建立的工程文件进行修改。 实验结果: 心得体会: 这个实验要求不高,只是希望我们能够初步了解C++的运行和开发环境。在实验的时候,我电脑的VisualC++6.0被卸载了,我又去网上下载安装了,在上机调试的过程中慢慢对C++有了一定的了解。 第二次:类的定义和对象的使用实验 实验时间:2015年 3 月25 日实验室:S311 实验题目: 1.定义一个学生类,其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。 要求: (1)使用成员函数实现输入、输出; (2)使用构造函数和析构函数,构造函数中实现对数据的输入、析构函数中实现输出; (3)编写主函数,定义对象,完成相应功能。 2.定义日期类Date。要求: (1)可以设置日期; (2)日期加一天操作; (3)输出函数,输出格式为“XXXX年XX月XX日”; (4)编写主函数,定义对象,完成相应功能。 实验目的: 1、掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装; 2、类对象的定义; 3、理解类的成员的访问控制的含义,共有、私有和保护成员的区别; 4、掌握构造函数和析构函数的含义与作用、定义和实现,能够根据要求正确定 义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数。 实验要求: 1、根据实验要求写出相应的程序、调试程序; 2、给出程序结果; 3、真正理解实验内容,学到相应的知识。 实验主要步骤: 1.#include #include using namespace std; class student { public: student() { } student(char *id,char *name,int age) { strcpy(stuId,id); strcpy(stuName,name); stuAge = age; } void display() { cout<<"学号:"< } private: char stuId[10]; char stuName[20]; int stuAge; }; int main() { student st("001","刘阳",15); st.display(); return 0; } 2. # include # include using namespace std; class Date { private: int year,month,day; public: void set(int y,int m,int d); bool isLeapYear() { return (year%4==0&&year%100!=0)||(year%400==0);} friend Date & operator++(Date & a); void print();}; void Date::set(int y,int m,int d) { if(!(m<1||m>12)) { month=m; if(m==12||m==10||m==8||m==7||m==5||m==3||m==1) {if(!(d<1||d>31)) day=d;} else { if(!(d<1||d>30)) day=d; else exit(1);} } else exit(1);year=y; } void Date::print() { cout< { bool mend=0,yend=0; switch(a.month) {case 12: yend=a.day==31; break; case 10: case 8: case 3: case 1: mend=a.day==31; break; case 2: mend=a.day==28+a.isLeapYear(); break; case 4: case 6: case 9: case 11: mend=a.day==30; break;} yend?(a.day=1,a.month=1,a.year++):(mend?a.day=1,a.month++:a.day++); return a; } int main() { Date d1; d1.set(2013,4,20); d1.print(); ++d1; d1.print(); } 实验结果: 实验截图1: 实验截图2: 心得体会: 对实验的程序代码不是很懂,就翻阅了书籍和查找了百度,实验过程中,发 现自己对C++的知识不是特别敏感,后来找来课本开始温习一遍,真发现学习 是一个要瞻前顾后,循序渐进的过程。还有很多知识需要自己去认真学习,通过 实验也加深了对知识的了解和实际的运用,我相信以后的实验过程一定会事半功 倍的。 第三次:多文件结构及静态成员和对象数组的使用 实验 实验时间: 2015年4月 1 日实验室: S311 实验题目: 1、编写一个函数,求从n个不同的数中取r个数的所有选择的种数。 要求: (1)将main()函数放在一个.cpp文件中; (2)将fn(int n) ,Cnr(int n, int r)放在另一个.cpp文件中; (3)将函数原型说明放在一个头文件中; (4)建立一个项目,将这三个文件加到你的项目中,编译连接使你的程序正常运行。 实验目的: 1、掌握自定义头文件的方法; 2、学会建立和调试多文件程序; 3、了解静态成员的使用; 4、掌握对象数组的使用。 实验要求: 1、学会自定义头文件的方法。 2、调试程序并修改相应错误的地方。 3、给出相应结果。 实验主要步骤: 一、编写一个函数,求从n个不同的数中取r个数的所有选择的种数。 要求: (1)将main()函数放在一个.cpp文件中; (2)将fn(int n) ,Cnr(int n, int r)放在另一个.cpp文件中; (3)将函数原型说明放在一个头文件中; (4)建立一个项目,将这三个文件加到你的项目中,编译连接使你的程序正常运行。 实验结果: (1)函数原型说明:int fn(int n);int cnr(int n,int r); (2)主函数声明:void main(); (3)函数实现:#include"函数原型.h" int fn(int n) {int s; for(s=1;n>=1;n--)s*=n;return s;}; int cnr(int n,int r) {int s;for(s=1;n>r;n--) s*=n;return s;}; (4)主函数实现:#include"函数原型.h" #include"主函数声明.h" #include using namespace std; void main(){ cout<<"从8个不同的数中取出3个数的所有选择种数的算法如下:"< cout<<"fn(3)="< cout<<"cnr(8,3)="< cout<<"种数="<<"cnr(8,3)/fn(3)="< } (5)实验截图: 心得体会: 实验开始时,真的不知道该如何下手,感觉大脑是空白的,后来通过重新看 书和查阅资料,总算有了一点起色。最大的问题就是头文件,源文件,cpp执行, 建立这几个文件,把程序的相关部分放在相应文件中还不熟练。在实验的过程中, 我还发现细心也比较重要,细小的问题就不会被放掉,C++试验的魅力相信在以 后的实验过程我会更加有所体会。 第四次:类的继承和派生实验 实验时间: 2015年 4 月 15 日实验室: S311 实验题目: 1、编写一个程序计算出球、圆柱和圆锥的表面积和体积。 要求: (1)定义一个基类,至少含有一个数据成员半径,并设为保护成员; (2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函 数和输出函数; (3)编写主函数,求球、圆柱、圆锥的表面积和体积 2、编写一个学生和教师数据输入和显示程序。其中,学生数据有编号、姓 名、班级和成绩,教师数据有编号、姓名、职称和部门。 要求: (1)将编号、姓名输入和显示设计成一个类person; (2)设计类person的派生类:学生类student和教师类teacher; (3)各个类的声明放在相应的头文件中(*.h),类的实现放在相应的实现文件中(*.cpp):person.h,person.cpp,student.h,student.cpp,teacher.h,teacher.cpp; (4)编写一个主文件(SY4_2.cpp),在该文件中分别定义student、teacher 的对象,完成相应功能。 实验目的: 1、理解继承的含义,掌握派生类的定义方法和实现; 2、理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访 问继承层次中的各种类成员; 3、理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派 生类成员可以访问基类的部分非公开的成员; 4、条件编译的运用。多文件结构的进一步使用。 实验要求: 1、根据实验指导书给出的题目写出相应的程序代码 2、掌握好所涉及的相关内容 实验主要步骤: 1、# include #include using namespace std; const float PI=3.14f; //几何类 class Geometry { public: void getR(float r) { this->r=r; } protected: float r; }; //球类 class Qiu:public Geometry { public: float getArea(float r) { getR(r); s=4*PI*r*r; return s; } float getVolume(float r) { getR(r); v=(4*PI*r*r*r)/3; return v; } private: float s,v; }; //柱类 class Zhu:public Geometry { public: float getArea(float r,float h) { getR(r); this->h=h; s=2*PI*r*h+2*PI*r*r; return s; } float getVolume(float r,float h) { getR(r); this->h=h; v=PI*r*r*h; return v; } private: float s,v,h; }; //锥类 class Zhui:public Geometry { public: float getArea(float r,float h) { getR(r); float l=sqrt(h*h+r*r); s=PI*r*l+PI*r*r; return s; } float getVolume(float r,float h ) { getR(r); this->h=h; v=(PI*r*r*h)/3; return v; } private: float s,v,h; }; void main() { Qiu a; Zhu b; Zhui c; float s1,s2,s3; float v1,v2,v3; s1=a.getArea(3); v1=a.getVolume(3); s2=b.getArea(3,2); v2=b.getVolume(3,2); s3=c.getArea(3,2); v3=c.getVolume(3,2); cout<<"球类:"< cout<<"柱类:"< cout<<"锥类:"< 2、#include #include using namespace std; class person{ public: void print() {cout<<"输入编号:"; cin>>number; cout<<"输入姓名:"; cin>>name; } void show() {cout<<"编号:"< cout<<"姓名:"< } protected: int number; string name; }; class student:virtual public person{ public: void print() {person::print(); cout<<"输入班号:"; cin>>NO; cout<<"输入成绩:"; cin>>score; } void show() {person::show(); cout<<"班号:"< cout<<"成绩:"< } protected: int NO; float score; }; class teacher:virtual public person{ public: void print() {person::print(); cout<<"输入职称:"; cin>>title; cout<<"输入部门:"; cin>>dept; } void show() {person::show(); cout<<"职称:"< cout<<"部门:"< } protected: string title,dept; }; int main() {student stu1,stu2; teacher teac1,teac2; cout<<"请根据提示输入学生信息"< cout<<"学生信息如下"< stu1.show(); cout< cout<<"请根据提示输入老师信息"< cout<<"老师信息如下"< teac1.show(); cout< return 0; } 实验结果: 实验截图1: 实验截图2: 心得体会: 在C++的理论课上,就觉得这部分的内容比较难,掌握得并不好,本来想放弃不做这个实验的,可后来老师要求这个实验必须做,所以只好硬着头皮开始,翻开课本重新阅读,又在网上查阅了一些相关资料,发现好像并不是太难,还是可以理解的,虽然在实验的过程中遇到了一些困难,但是最后都圆满解决了,突然发觉每次实验其实就是一次重新发现问题以及解决问题的过程,既然都知道不 会,还不去解决,那是可悲的,这次实验着实让我受益匪浅。 第 5 次:多继承实验 实验时间:2015 年 4 月29 日实验室:S311 实验题目: 1、输入以下程序,分析运行结果。 #include using namespace std; class B1 { public: B1(int i) { b1 = i; cout<<"构造函数B1."< int b1; }; class B2 { public: B2(int i) { b2 = i; cout<<"构造函数B2."< int b2; }; class B3 { public: B3(int i) { b3 = i; cout<<"构造函数B3."< private: int b3; }; class A : public B2, public B1 { public: A(int i, int j, int k, int l):B1(i), B2(j), bb(k) { a = l; cout<<"构造函数A."< { B1::print(); B2::print();