第一篇:C++ 实验一总结报告
实验报告
实验一 VC++ 6.0开发环境应用入门 1.实验结果:
2.实验结果分析:
该程序是利用C++输出两句话,练习输出格式。实验二 C++简单程序设计
1.实验结果:
2.实验结果分析:
求一个图形的面积要先判断是哪一种图形,用switch语句就可以解决,再利用公式即可。如输入1为圆形,再输入边长3,利用面积公式,它的面积就是28.2744。
3.实验结果:
4.实验结果分析:
复习i++与++i的运用。i++在当前语句时,此时i的值是没有变化的,直到此句执行结束,i的值才会+1;++i在当前语句执行之前时,i的值就已经+1。实验三 函数的应用
1.实验结果:
2.实验结果分析:
函数的递归作用,先声明定义一个函数,输入形参n的值,然后进行比较,小于3的直接返回1;大于3的就继续递归,直到得到的形参值小于3,返回1为止。从程序结果得知,返回n个1就最终递归返回n。
3.编写一个函数把华氏温度转换为摄氏温度,转换公式为:C =(F-32)* 5/9。
4.使用系统函数pow(x,y)计算x的值,注意包含头文件math.h
程序:
y
实验总结:
1.基本掌握如何操作C++的界面,包括运行,编译,调试等过程;
2.学会编写简单的C++程序,掌握基本数据类型变量和常量的应用,运算符与表达式的应用;
3.学会使用VC++6.0开发环境中的debug调试功能:单步执行、设置断点、观察变量值;熟练使用F10,F11,shift+F11,ctrl+F10等快捷键的使用。
4.基本掌握函数的运用,并对C语言的复习与运用,认识了C++与C语言的异同。
实验报告
实验四 C++程序的结构
一、实验目的
1.观察程序运行中变量的作用域、生存期和可见性;
2.学习类的静态成员的使用;
3.学习多文件结构在C++程序中的使用;
二、实验任务
1.运行下面的程序,观察变量x、y的值。
#include
cout << “Step into fn1()...” << endl;
using namespace std;
fn1();
void fn1();
cout << “Back in main” << endl;
int x = 1, y = 2;
cout << “x = ” << x << endl;
int main()
cout << “y = ” << y << endl;
{
return 0;
cout << “Begin...” << endl;
}
cout << “x = ” << x << endl;
void fn1()
cout << “y = ” << y << endl;
{
cout << “Evaluate x and y in int y = 200;main()...” << endl;
cout << “x = ” << x << endl;
int x = 10, y = 20;
cout << “y = ” << y << endl;
cout << “x = ” << x << endl;
}
cout << “y = ” << y << endl;
2.实现客户机(CLIENT)类。声明字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h中声明类和实现类,在文件client.cpp中测试这个类,观察相应的成员变量取值的变化情况。
程序:
//实现客户机(CLIENT)类。
#include
cout<<“Client构造函数被调用”< Clientnum++;} ~Client(){ cout<<“Client析构函数被调用”< Clientnum--;} static void ChangeServername(){ cout<<“请输入服务器的名字:”< cin>>SeverName; } void show();};int Client::Clientnum=0;char Client::SeverName[10]=“abcd”;//Client.cpp void Client::show(){ 实验五 数组、指针与字符串 一、实验目的 cout<<“该用户机的服务器端名字是:”< //Client.exe void main(){ Client::ChangeServername();Client a;a.show();Client::ChangeServername();Client b;b.show();Client::ChangeServername();Client c;c.show();} 1.学习使用数组数据对象; 2.学习字符串数据的组织和处理; 3.学习标准C++库的使用; 4.掌握指针的使用方法; 5.练习通过debug观察指针的内容及其所指的对象的内容; 6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用; 7.分别使用字符数组和标准C++库练习处理字符串的方法。 二、实验任务 1.编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。 程序: #include for(i=0;i<3;i++)cout<<“请输入一个3*3的矩 cout< cout< for(j=0;j<3;j++)} cin>>a[i][j];2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 程序: #include int i,j,t; cout<<“请输入一个矩阵元素个数n*n=”; cin>>t; int *p=new int[t]; cout< for(i=0;i cin>>p[i]; cout<<“该矩阵的转置为:”< for(j=0;j { for(i=0;i { cout< i=i+sqrt(t); } cout< } } 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 #include int i,j; char a[20],b[10]; cout<<“请输入一个不大于10个字符的字符串:”< cin>>a; cout<<“请再输入一个不大于10个字符的字符串:”< cin>>b; for(i=0;i<10;i++) if(a[i]==' ') { j=i; break; } for(i=0;i<10;i++) { a[i+j]=b[i]; if(b[i]==' ') break; } cout<<“两字符串的连接得:”< cout< #include cin>>a;cout<<“请再输入一个不大于10个字符的字符串:”< cin>>b;cout<<“两字符串的连接得:”< 5.声明一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。 程序: #include char street[20];// 街道地址 char city[10];// 市 char prov[10];// 省 char post[7];// 邮政编码 int no;// 记录序号 public: employee(char [],char [],char [],char [],char [],int);void change_name();void display();};employee::employee(char n[],char s[],char c[],char p1[],char p2[],int num){ strcpy(name,n);strcpy(street,s);strcpy(city,c);strcpy(prov,p1);strcpy(post,p2);no=num;} void employee::change_name(){ char n[20];cout<<“记录”< 6.声明包含5个元素的对象数组,每个元素都是Employee类型的对象。 //声明包含5个元素的对象数组,每个元素都是Employee类型的对象。#include int Chinese;// 语文 int English;// 英语 int Sport;// 体育 int Num;// 序号 public: void N(int n){Num=n;} void M(int m){Math=m;} void C(int c){Chinese=c;} void E(int e){English=e;} void S(int s){Sport=s;} void display(){cout<<“输出序号”< cout<<“请依次输入序号、数学、语文、英语和体育成绩:”< cin>>n>>m>>c>>e>>s; date[i].N(n); date[i].M(m); date[i].C(c); date[i].E(e); date[i].S(s);} for(i=0;i date[i].display();} 实验六 类与对象 一、实验目的 1.掌握类的声明和使用。 2.掌握类的声明和对象的声明。 3.复习具有不同访问属性的成员的访问方式。 4.观察构造函数和析构函数的执行过程。 5.学习类的组合使用方法。 二、实验任务 1.声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,其中,rank为字符型,其值可以为P1、P2等;frequency为单位是MHz的整型数;voltage为浮点型的电压值。 公有成员函数包括:GetRank()、GetFrequency()、GetVoltage()用来获取等级、频率、电压的值;SetRank、SetFrequency、SetVoltage用来设置等级、频率、电压的值;run、stop中run里面要求输出“CPU开始运行!”;stop里面要求输出“CPU停止运行!”。 构造函数里面需要输出“构造一个CPU”,析构函数里面需要输出“析构一个CPU”。观察构造函数和析构函数的调用顺序。 程序://声明一个CPU类 #include freauency=f; voltage=v; cout<<“构造一个CPU!”< void stop(){cout<< “CPU停止运行!”< C++ 实验总结报告 研究课题:图形编辑器 一、实验目的 1.熟悉C++的一些重要性质,利用封装、继承、虚函数和多态性等特性,通过实验学习如何对各类图元的属性和方法进行合理的封装 2.学习Microsoft的Visual C++编程工具 3.掌握MFC的相关知识 4.掌握基本的文件保存、读取以及操作封装技术 二、实验目的 设计一个简单的图形编辑器 三、实验所用仪器、设备 计算机:PentiumIII 800 以上 256M内存 操作系统:Windows 2000/XP 开发集成环境:Visual C++ 6.0 四、软件功能简介 (注:此软件是从网上下载得来) 该软件具有汉化的菜单界面(仿Windows自带画图软件),具有文件打开、编辑、保存等功能。编辑部分包括可以在编辑区域画直线、圆、矩形、曲线等矢量图形,可插入文字,可以修改线条的线型、颜色等基本属性。 五、部分代码分析 1.类的初始分析: class CDrawApp : public CWinApp { public: CDrawApp(); // Overrides virtual BOOL InitInstance(); // Implementation protected: //{{AFX_MSG(CDrawApp)afx_msg void OnAppAbout();// NOTE-the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG DECLARE_MESSAGE_MAP()};学习C++我们最需要理解的就是它面向对象的设计思想。这种思想可以在类和对象上得到充分的体现。 类是面向对象程序设计的核心,它实际上是由用户定义的一种新的复杂数据类型。它是通过抽象数据类型ADT方法来实现的一种数据类型,将不同类型的数据和与这些数据相关的操作封装在一起形成一个集合体。因此,它具有更高的抽象性,实现了信息的隐藏和封装。 对象是某种类的一个实例,是类的具体体现。一个类可以有多个对象。 分析这一段代码,编程者将CDrawApp();设置为公有函数,这样做就是在整个函数的外面开了一个口,使用户可以利用这一函数处理具体问题而不必详解函数内部,是面向对象中封装特性的一个具体体现;另外,此函数中还包含了构造函数与析构函数,构造函数完成对新对象的初始化工作,析构函数是构造函数的配对物,它实现与构造函数相反的功能。另外,这段代码中还包括布尔型虚函数InitInstance(),这是函数重载,也是多态性的具体体现。 由这段代码我们可以了解关于类和对象的一些知识,为我们进一步了解面向对象程序设计的思想精髓奠定了基础。 2.对构造函数和析构函数的分析 构造函数 CCreateLine::CCreateLine(): m_begin(0,0), m_end(0,0){ m_nStep = 0;// 初始化操作步为 0 } 构造函数:C++中“类”只定义了一组对象的类型。要使用这个类还必须用“类”说明它的对象,每个对象中的数据成员还必须赋初值,这些功能都是由构造函数完成的。此造函数用初始化列表的方式对直线类的私有成员进行初始化,同时记下操作步m_nStep是直线类从指令类中继承来的成员,它在指令类中属于保护成员,在直线类中则成为私有成员。这是数据共享与数据保护两者兼顾时的一种处理方法。 析构函数 CCreateLine::~CCreateLine(){ } 它是构造函数的配对物,与构造函数一样是与类同名的成员函数,并在函数名前加上一个’~’以便与构造函数相区别。此析构函数中没有任何操作语句,但它并非没有任何操作。在任何一个对象消失时都要调用本类的析构函数进行扫尾工作。在构造对象时,构造函数分配资源给程序,在对象作用结束后,这些资源的释放就要靠析构函数。当然析构函数中也是可以有语句的,当需要在对象消失之前执行某种操作时,可以把语句写在里边。 3.继承和虚函数分析 class CDrawRect : public CDrawObj { protected: DECLARE_SERIAL(CDrawRect);CDrawRect(); public: CDrawRect(const CRect& position);//添加了对新数据成员的初始化 // Implementation public: virtual void Serialize(CArchive& ar);//添加了对新数据成员操作 virtual void Draw(CDC* pDC);//根据要求画出每个图形 virtual int GetHandleCount();//line和roundRectangle特殊处理 virtual CPoint GetHandle(int nHandle);//line和roundRectangle特殊处理 virtual HCURSOR GetHandleCursor(int nHandle);//line和roundRectangle特殊处理 virtual void MoveHandleTo(int nHandle, CPoint point, CDrawView* pView = NULL);//通过特征点来修改大小 virtual BOOL Intersects(const CRect& rect);//判断与图形是否存在相交 virtual CDrawObj* Clone(CDrawDoc* pDoc);//Clone一个新对象加入到pDoc中 protected: enum Shape { rectangle, roundRectangle, ellipse, line };Shape m_nShape;//通过枚举变量来标示属于上述四种的哪一种形状 CPoint m_roundness;// for roundRect corners friend class CRectTool;};在阅读此函数的源代码过程中,我感觉到对基类中虚函数的使用对整个程序具有着十分重要的意义。正如上段代码,它的前提是派生类CDrawRect对基类CDrawObj进行了继承,只有在对基类中的虚函数进行设置后,我们才能更加高效地处理和使用基类和派生类中的方法。所以,我感觉到在学习面向对象程序设计时,应当尤为注意基类中虚方法的创建和后期调用。 六、个人学习体会 在学习C++以前,我认为C++只是在C语言的基础上的一种延伸,认为只要学过C语言,就可以用C语言的那种设计思想来学习C++、设计C++程序。正是由于抱了这种错误的思想,使我在一开始学习C++的时候遇到了很大的困难,我没有办法体会面向对象的设计思想,我在学习这门课的时候老是想着实现这个函数功能的具体过程,而没太注意对象分类的重要性。 随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以解决一些利用面向过程的设计思想无法解决的问题,我自己也试着编写一些小的C++程序,当然在这个过程中遇到了很多困难,其中调试带来的困难让我无法忘记,在调试程序的同时,我也总结出来了一些调试的小技巧,让我在C语言课程设计中也受用匪浅。 在学习这门课的过程中,我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。 另外,我还感觉到一个好的程序编出来需要很多人的团结合作。我在检查自己编写的程序是否有BUG未被找出的时候,我会让我的同学作为一个程序使用者来找出未发现的BUG并提出改进意见,这让我们的工作更加高效。 很高兴能够了解到C++的神奇魅力和面向对象程序设计的独特思想,它为我今后的程序设计奠定了基础。感谢老师对我们的悉心教授! 上机实验: 1、回文是指正读,反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,试用STACK类编写该程序。 #include int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位对原始数组的检测索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];} //将原始数组的一半元素入栈 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //从栈顶开始依次匹配 while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文数 free(cMyStack);return 1;} else {//不是回文数 free(cMyStack);return 0;} } 运行结果: 2.利用两个栈类S1、S2模拟一个队列时,编写一程序利用栈的运算实现队列的插入、删除以及判断队列空的运算。 #include template assert(!mStack2.empty());mStack2.pop();} template sq.pushBack(1);printQueue(sq);sq.pushBack(2);printQueue(sq);sq.pushBack(3);printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);return 0;} 运行结果: 实验2: 声明复数的类Complex,使用友元函数add实现复数的加法。 #include < iostream > using namespace std; class Complex { private: double real, image;public : Complex(){} Complex(double a,double b) { real = a;image = b;} void setRI(double a, double b){ real = a;image = b;} double getReal(){ return real;} double getImage(){ return image;} void print(){ if(image>0) cout<<“复数:”<< real <<“ + ”<< image <<“i”<< endl;if(image<0) cout<<“复数:”<< real <<“-”<< image <<“i”<< endl;} friend Complex add(Complex ,Complex);//声明友元函数 }; Complex add(Complex c1, Complex c2)//定义友元函数 { Complex c3; c3.real = c1.real + c2.real;//访问Complex类中的私有成员 c3.image = c1.image + c2.image;return c3;} void main(){ Complex c1(29, 0.634), c2, c3;c2.setRI(85,106.012);c3 = add(c1, c2); cout<<“复数一:”;c1.print();cout<<“复数二:”;c2.print();cout<<“相加后:”;c3.print();} 结果: 实验三: 7-5 定义一个基类Shape,在此基础上派生出一个Rectangle和Circle,二者都有getArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square.#include public: Shape(){} double GetArea() { return 0.1;} };class Rectangle: public Shape { public: Rectangle(double w,double h) { width=w;height=h;} double GetArea(){ return width*height;} private: double width,height;};class Circle:public Shape { private: double r; public: Circle(double rr){ r=rr;} double GetArea(){ return PI*r*r;} }; int main(){ Rectangle * rec=new Rectangle(5,6); Circle * cir=new Circle(5); cout<<“RecArea:”< cout<<“CirArea:”< return 1; } 运行结果: 7-10.定义一个Object类,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员height和width及相应的操作函数,声明一个Box对象,观察构造函数和析构函数的调用顺序。#include object(){ cout<<“构造object对象”< class box:public object { private: int Height,Width;public: box(){ cout<<“构造box对象”< 面向对象程序设计实验 Object Oriented Programming 课程编号: 学 分: 学 时:10 先修课程:计算机导论、C语言程序设计 适用专业:计算机科学与技术、软件工程 教 材:《C++程序设计教程:实验手册》,清华大学出版社,Harvery M.,Paul J.,Tem R.,2004 开课院系:计算机科学与技术系 一、实验的性质和任务 C++是一门高效实用的程序设计语言,它既可进行过程化程序设计,也可进行面向对象程序设计。随着C++逐渐成为ANSI标准,这种新的面向对象程序设计语言已经成为了程序员最广泛使用的工具。本课程是一门计算机及相关专业的重要的专业基础课,开设实验课程主要目的是使学生掌握有关C++语言的基本概念、基本语法和编程方法,理解C++语言面向对象的重要特征,促使学生理论联系实际,能够灵活应用自己所学的理论知识进行程序开发,增强学生的实践动手技能,并能够提高学生独立分析问题和解决问题的能力。 二、实验的基本内容及要求 实验 一、C++程序的运行环境、简单C++数据类型及运算(1学时)1. 实验目的 (1)熟悉VC++6.0集成开发环境;掌握简单C++程序的编辑、编译和运行 (2)熟悉和理解C++语言中的数据类型、表达式;掌握简单C++程序的编写及调试方法 2. 实验内容 (1)熟悉VC++6.0集成开发环境的基本操作方法,学会独立使用该系统(2)了解在该系统上如何编辑、编译、连接和运行一个C++程序(3)通过运行一个简单的C++程序,初步了解C++源程序的特点 (4)熟悉和理解C++语言中的数据类型、表达式,了解基本数据类型的字节宽度和范围表示 (5)利用学习的数据类型,编制简单的C++程序实验准备(6)初步学习程序调试方法 3. 实验准备 (1)安装Visual C++编译系统 (2)熟悉Vc++6.0编译系统的使用步骤,以及简单C++程序的编辑、编译和运行过程(3)复习C++的基本数据类型,表达式(4)复习程序的上机调试过程 (5)根据实验内容要求,编写好实验程序 4. 实验步骤 (1)选择菜单“开始/程序/Microsoft Visual Studio 6.0/Microsoft Visual C++ 6.0”,得到Visual C++ 6.0启动后的用户界面;(2)创建一个新工程; (3)编写一个简单的C++源程序,并保存;(4)编译连接和运行程序 (5)输入源程序,编译、连接直到没有错误(6)运行程序,观察程序运行结果 5. 实验报告 (1)提交源程序 (2)举例说明在建立源程序、编译、连接程序时,发现的错误属于何种类型及解决办法 (3)改变所用变量的数据类型,观察程序运行结果的变化并分析原因(4)写出上机实验体会和实验报告 实验 二、数组(1学时)1.实验目的 熟练掌握一维数组和二维数组的定义、引用和初始化;掌握字符数组与字符串的关系以及字符串变量的表示,熟练字符串处理函数的应用。2.实验内容 (1)有一个数组,内放10个整数,找出最小的数和它的下标,然后把它和数组中最前面的元素对换 输入一个n×n的矩阵,求出两条对角线元素值之和 编写一程序,将两个字符串连接起来,不要strcat函数 3.实验准备 (1)复习一维数组和二维数组的定义、引用和初始化方法,进一步了解常用字符串处理函数的使用。 (2)根据实验内容要求,编写好实验程序 4.实验步骤 (1)输入源程序,编译、连接直到没有错误(2)根据实验步骤,撰写实验报告 5.实验报告 (1)结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果(2)整理上机步骤,总结经验和体会(3)完成实验报告和提交源程序 实验 三、函数与编译预处理(1学时)1.实验目的 掌握函数的定义、申明和使用方法;掌握函数调用的方法;掌握全局变量、局部变量、静态变量的使用方法;掌握编译预处理的使用。2.实验内容 (1)求两正整数的最大公约数和最小公倍速数,用一个函数求最大公约数,另一个函数求最小公倍数。要求:不使用全局变量。将最大公约数和最小公倍数在主函数中输出。 (2)十进位制数转换二、八和十六进制数程序。要求: a.编写一个函数实现十进制数转换其它进制数; b.在主函数中给十进制数和转换的进位制,输出转换结果。 3.实验准备 (1)复习函数的定义、申明和使用方法,熟悉函数调用和编译预处理(2)根据实验内容要求,编写好实验程序 4.实验步骤 (1)输入源程序,编译、连接直到没有错误(2)根据实验步骤,撰写实验报告 5.实验报告 (1)结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果(2)整理上机步骤,总结经验和体会(3)完成实验报告和提交源程序 实验 四、指针(2学时)1.实验目的 熟练掌握各种类型指针的定义、申明、引用和运算;掌握数组指针和指向数组的指针变量,以及字符串的指针和指向字符串的指针变量;了解指针与链表关系。2.实验内容 (1)编写程序,在堆内存中申请一个float型数组,把10个float型数据0.1、0.2、0.3„、1.0赋予该数组,然后使用float型指针输出该数组的各元素值并求出其累加和。(2)使用指针编写函数strcat()函数,即实现两个字符串的首尾连接(将字符串str2接到str1的后面,str1最后面的‘ ’被取消)。 (3)用指针变量设计一通用函数,该函数查找实型数组中最大和最小元素并输出相应元素和下标。3.实验准备 (1)复习指针的定义、申明和引用方法,以及其它各种类型指针的定义以及使用(2)根据实验内容要求,编写好实验程序 4.实验步骤 (1)输入源程序,编译、连接直到没有错误(2)根据实验步骤,撰写实验报告 5.实验报告 (1)结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果(2)整理上机步骤,总结经验和体会(3)完成实验报告和提交源程序 实验 五、类和对象(2学时)1.实验目的 掌握类的定义以及类对象的定义;理解类的成员的访问控制的含义,公有、私有和保护成员的区别;掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数,能够根据给定的要求定义类并实现类的成员函数。2.实验内容 (1)定义一个圆类,计算圆的面积和周长。要求:分别用成员函数和友元函数来求圆的面积和周长。 (2)定义一个学生类,其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。要求: a)使用成员函数实现对输出的输入、输出; b)使用构造函数和析构函数实现对数据的输入、输出。 3.实验准备 (1)复习类以及对象的定义和使用 (2)复习构造函数和析构函数的作用、定义方式和实现(3)根据实验内容要求,编写好实验程序 4.实验步骤 (1)输入源程序,编译、连接直到没有错误(2)根据实验步骤,撰写实验报告 5.实验报告 (1)结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果(2)整理上机步骤,总结经验和体会(3)完成实验报告和提交源程序 实验 六、继承与派生类(2学时)1.实验目的 理解继承的含义;掌握派生类的定义方法和实现;理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员; 理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。2.实验内容 1)编写一个学生和教师数据输入和显示程序,学生数据要求有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名的输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类,学生数据中的班号和成绩的输入和显示在student类中实现,教师数据中的职称和部门的输入和显示在teacher类中实现。最后在主函数中进行该类的测试。 2)编写一个程序计算出球、圆柱和圆锥的表面积和体积。要求: (1)定义一个基类圆,至少含有一个数据成员半径; (2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数; (3)定义主函数,求球、圆柱、圆锥的和体积。 3.实验准备 (1)复习继承和派生类的定义和实现方法 (2)复习不同继承方式下,派生类成员对基类成员的访问方式(3)根据实验内容要求,编写好实验程序 4.实验步骤 (1)输入源程序,编译、连接直到没有错误(2)根据实验步骤,撰写实验报告 5.实验报告 (1)结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果(2)整理上机步骤,总结经验和体会(3)完成实验报告和提交源程序 实验 七、多态性和虚函数(1学时)1.实验目的 掌握运算符重载的概念以及使用friend重载运算符的方法;掌握虚函数和纯虚函数的概念及应用 2.实验内容 1) 分别用成员函数和友元函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。要求: (1)输出结果是最简分数(可以是带分数);(2)分母为1,只输出分子。2) 下列shape类是一个表示形状的抽象类,area()为求图形面积的函数。请从shape类派生三角形类(triangle)、圆类(circles)、并给出具体的求面积函数。#include (1)复习运算符重载的概念以及使用friend重载运算符的方法(2)根据实验内容要求,编写好实验程序 4.实验步骤 (1)输入源程序,编译、连接直到没有错误(2)根据实验步骤,撰写实验报告 5.实验报告 (1)结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果(2)整理上机步骤,总结经验和体会(3)完成实验报告和提交源程序 三、参考书目 1.《C++程序设计实验指导》,清华大学出版社,钱能,2001.2.《C++大学教程实验指导书》,电子工业出版社,Harvey M., Paul J., Tem R., 2003.3.《C++程序设计实验指导与实训》,中国水利水电出版社,蔡立军,杜四春,银红霞,2004.制定人:谢永华 审定人:王新芝 批准人:顾韵华 实验一 熟悉实验环境 一、实验目的 1)了解和使用VC++集成开发环境; 2)熟悉VC++环境的基本命令和功能键; 3)学习完整的C++程序开发过程; 4)理解简单的C++程序结构; 5)学习C++程序基本的输入输出操作。 二、实验内容及要求 1)控制台应用程序:在终端上输出“Hello”(printf); 2)Windows应用程序:在窗口上输出“Hello”(pDC->TextOut(50,50,“Hello”))。 三、实验重点 1)C、C++、VC++三者之间的关系; 2)项目与源文件的区别; 3)控制台应用程序与Windows应用程序的区别。 四、实验步骤 1)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 在一个项目中可有几个main()函数?如何调试多个源程序? 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 《C++面向对象程序设计习题解析与上机指导》,陈维兴等,清华大学出版社 实验三 函数 一、实验目的 学习C++中内置函数、默认参数的定义与调用方法; 学习C++中函数重载的使用方法。 二、实验内容及要求 编写一个sum内联函数,能返回二个整数的和,其二个参数都为默认参数,然后由主函数进行调用; 编写二个add函数,分别可对int与char类型进行加法操作,其中针对char类型的加法操作可视为连接操作,如add(‘x’,’y’)的返回值为”xy”。 三、实验重点 函数的重载; 默认参数的定义次序。 四、实验步骤 1)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 函数重载调用时的判断依据是什么? 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 实验五 类与对象 一、实验目的 1)学习类与对象的定义和声明; 2)掌握类与对象的使用方法; 3)学习数据成员与成员函数的访问方式。 二、实验内容及要求 1)编程实现一个student类,管理一个学生的基本信息,包括学生姓名、学号、语文成绩、数学成绩、英语成绩、平均成绩等数据成员,然后在main函数中,从键盘输入得到一个学生的基本信息,最后输出所有数据成员值到屏幕上; 2)要求使用成员函数的方式实现对姓名、学号的读写操作、语数英三科成绩的写操作、平均成绩的读操作。 三、实验重点 1)类与实例的关系; 四、实验步骤 1)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 为什么要采用成员函数对数据成员进行读写操作,而不是直接操作? 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 《C++面向对象程序设计习题解析与上机指导》,陈维兴等,清华大学出版社 实验七 对象数组与对象指针 一、实验目的 1)掌握数组与指针的定义与使用方法; 2)理解数组与指针的存储分配与表示; 3)学习向函数传递数组的方法; 4)学习用指针和引用向函数传递参数。 二、实验内容及要求 1)在实验五的student类基础上,实现一个Sum函数,可将一个student类数组作为参数传送到函数中,计算出语、数、英的总分,并输出在屏幕上; 2)要求Sum函数中的参数传送分别用普通、指针和引用三种方式实现。 三、实验重点 1)直接传送、引用传送、指针传送三种方式的区别,分别对参数值的影响; 四、实验步骤 1)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 对象数组和对象指针与普通对象和普通指针的关系。 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 《C++面向对象程序设计习题解析与上机指导》,陈维兴等,清华大学出版社 《C++面向对象程序设计习题解析与上机指导》,陈维兴等,清华大学出版社 实验九 派生类与继承 一、实验目的 1)学习类的的继承,能够定义和使用类的继承关系; 2)学习派生类的声明与定义方法; 3)熟悉公有派生和私有派生的访问特性。 二、实验内容及要求 在实验五的student类基础上,定义小学生、中学生、大学生三个继承类; 小学生类增加“年级”数据成员及读写函数,实现全部信息的屏幕输出; 中学生类增加“文理科”数据成员及读写函数,实现全部信息的屏幕输出; 大学生类增加“专业”数据成员及读写函数,实现全部信息的屏幕输出。 三、实验重点 Private和public派生方式对基类数据成员的可见性。 四、实验步骤 1)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 为什么要派生类?类继承的好处是什么? 派生类的构造/析构函数执行次序。 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 实验十一 函数和运算符重载 一、实验目的 1)掌握运算符重载的基本方法。 二、实验内容及要求 在实验五student类的基础上重载“= =”运算符,判断二个student对象是否相等; 在实验五student类的基础上重载“>”运算符,判断二个student对象的成绩关系。 三、实验重点 1)运算符重载的语法规则。 四、实验步骤 2)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 函数与运算符的关系。 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 《C++面向对象程序设计习题解析与上机指导》,陈维兴等,清华大学出版社 实验十三 函数模板 一、实验目的 1)理解模板的作用; 2)学习函数模板及其声明和生成方法; 3)学习函数模板的异常情形处理方法。 二、实验内容及要求 1)定义函数模板实现对int型数组和double型数组的累加。 三、实验重点 1)函数模板的语法规则。 四、实验步骤 1)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 函数模板的应用场景是什么? 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 《C++面向对象程序设计习题解析与上机指导》,陈维兴等,清华大学出版社 实验十五 自定义类型I/O 一、实验目的 1)熟悉流及流类库的作用; 2)掌握流类库中常用的类及其成员函数的使用方法。 二、实验内容及要求 1)在实验五student类的基础上,重载“>>”和“<<”运算符。 三、实验重点 1)自定义类型的I/O运算符重载。 四、实验步骤 1)进入VC+;2)编写程序;3)调试程序;4)分析结果。 五、实验环境 Windows 2000、VC++ 6.0 六、思考题 在自定义类型上重载“>>”和“<<”运算符的用途。 七、实验报告要求 1)实验名称、日期;2)姓名、班级、学号;3)源代码需有注释;4)实验结果;5)心得体会。 八、参考书籍 《C++面向对象程序设计习题解析与上机指导》,陈维兴等,清华大学出版社第二篇:C++实验总结报告
第三篇:C++实验
第四篇:c++实验(网络工程 ))
第五篇:C++实验教案