实验1环境熟悉和类与对象1.实验目的(1)熟悉上机环境,了解编译过程中常见的错误与解决办法。(2)学会编写简单的C++程序并会用debug调试程序。(3)观察构造函数和析构函数的执行过程。(4)掌握动态内存分配的两个运算符的使用(5)掌握函数参数的三种传递方式。(6)学习利用友元求解问题。2.实验内容(1)定义一个学生类,学生信息有学号、姓名和成绩。成绩包括计算机、英语、数学成绩和平均分。要求利用队列实现学生的入队、出队和显示等功能。算法思路:定义一个类Student,数据成员有:学生信息,进行入队、出队和显示操作的front(队头)、rear(队尾)和num(统计队列中元素的个数),其中学生信息定义成结构体类型的数组;成员函数有学生的入队操作、出队操作和显示操作,通过构造函数对学生信息进行初始化。(2)定义一个图书类,图书信息有图书名称、作者、出版社、价格。要求利用栈实现图书的入库、出库和显示等功能。算法思路:定义一个类Stack,数据成员有:图书信息,进行入库、出库和显示操作的top(栈顶指针),其中图书信息定义成结构体类型的数组;成员函数有图书的入库、出库和显示操作,通过构造函数对图书信息进行初始化。(3)有Distance类和Point类,将Distance类定义为Point类的友元类来实现计算两点之间距离。实验2函数重载与内联函数1.实验目的(1)掌握函数重载的应用。(2)理解内联函数的作用,掌握内联函数的应用。2.实验内容(1)利用重载求两个整数、三个整数和四个整数的最小值。(2)利用重载计算长方形、正方形、圆、梯形的面积。(3)利用重载编写求整数绝对值和求实数绝对值。(4)利用重载实现对10个整数和10个实数的排序。(5)判断一个字符是否为数字字符,要求用内联函数实现。实验3常量与引用1.实验目的(1)理解常量的含义与#define的区别。(2)理解引用的含义与指针的区别。(3)能够熟练掌握const的各种使用方法。(4)能够熟练应用引用、掌握拷贝构造函数的使用方法。2.实验内容(1)利用const定义整型常量、浮点型常量与字符型常量。(2)使用const与指针结合,实现常指针与指针常量。(3)使用const与函数结合,实现常参数与返回值为常数的函数。(4)利用const定义常对象,实现常成员函数。(5)分别利用引用与指针实现交换两个数值功能的函数,比较不同。实验4静态与命名控制1.实验目的(1)了解静态对象的定义和使用方法。(2)掌握静态数据成员和静态成员函数的定义和使用方法。2.实验内容(1)利用静态数据成员的概念,编写一个类,统计目前存在多少个该类的对象。提示:定义静态数据成员count,用来统计对象数目。(2)利用静态数据成员的概念,编写一个学生类,学生信息包括姓名、学号、成绩;统计学生的总人数及总成绩,并输出。提示:定义静态数据成员total_num和total_score,分别用来统计学生的总人数及总成绩。(3)定义一个Dog类,用静态数据成员Dogs记录Dog的个体数目,静态成员函数GetDogs用来存取Dogs。设计并测试这个类。(4)利用静态的概念,编写一个小猫类,统计并输出每个小猫的重量、小猫的总数量及总重量。实验5运算符重载1.实验目的(1)掌握成员函数重载运算符。(2)掌握友元函数重载运算符。(3)理解类型转换的必要性,掌握类型转换的使用方法。2.实验内容(1)重载减法运算符,实现两个字符串相减。-=运算符重载函数:constclassname&classname::operator-=(constclassname&sub_str)//定义+=运算符重载函数{char*temp=buffer;//指向原字符串所占空间buffer=newchar[length+1];//重新分配空间inti,j,k;i=0;j=0;k=0;while(istrlen(temp)&&jsub_str.length){if(temp[i]!=sub_str.buffer[j]){buffer[k]=temp[i];k++;}elsej++;i++;}while(istrlen(temp)){buffer[k]=temp[i];k++;i++;}buffer[k]='\0';delete[]temp;//释放原字符串所占空间return*this;}classname:指定义的类的名称。buffer:用来存放字符串。length:字符串的长度。(2)编写一个程序,用成员函数重载运算符“+”和“”,实现两个二维数组相加和相减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。类的声明:constintm=3;constintn=4;classMatrix{private:inta[m][n];public:Matrix();Matrix(intb[][n]);Matrixoperator+(Matrixb);Matrixoperator-(Matrixb);voidPrint();};(3)编写一个程序,用友元函数重载运算符“+”和“”,实现两个二维数组相加和相减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。类的声明:constintm=3;constintn=4;classMatrix{private:inta[m][n];public:Matrix();Matrix(intb[][n]);friendMatrixoperator+(Matrixa,Matrixb);friendMatrixoperator-(Matrixa,Matrixb);voidPrint();};(4)设计人民币类,其数据成员为fen(分)、jiao(角)、yuan(元)。重载这个类的加法、减法运算符。类的声明:classRmb{private:intyuan;intjiao;intfen;public:Rmb(inty=0,intj=0,intf=0):yuan(y),jiao(j),fen(f){}Rmboperator+(Rmbb);Rmboperator-(Rmbb);voidPrint();};(5)使用构造函数实现二维向量类型和复数类型的相互转换。类的声明:classVector;classComplex{private:doublereal;doubleimag;public:Complex(doubler=0,doublei=0);doublegetReal();doublegetImag();Complex(Vector);voidprint();};classVector{private:doublex,y;public:Vector(doubletx=0,doublety=0);doublegetx();doublegety();Vector(Complex);voidprint();};实验6组合、继承与多态1.实验目的(1)了解掌握组合与继承在定义类的不同与特点。(2)理解掌握累的构造与析构顺序,能够熟练使用继承进行类的定义。(3)理解虚函数使用方法与特点,熟练使用虚函数。(4)了解掌握纯虚函数与抽象类的特点与使用方法。(5)了解多重继承方法与特点,并熟练应用多重继承。2.实验内容(1)利用组合与继承结合方法实现定义一个班级类(学生类在下面People类上进行派生),类中包含班级专业名称、学生数量、学生类对象列表。classPeople{private:charName[20];charSex[2];public:char*constGetName(){returnName;}voidSetName(constchar*sname){strncpy(Name,sname,19);}};(2)定义实现交通工具、汽车、小汽车三个层次派生类,了解继承中类对象的构造与析构。(3)在(2)的基础上,增加虚函数,了解函数的动态绑定与静态绑定。(4)首先定义点类、颜色类,然后利用多重继承方法定义矩形类、圆形类。实验7模板1.实验目的(1)掌握函数模板与模板函数的使用。(2)掌握类模板与模板类的使用。2.实验内容(1)编写一个使用类模板对数组进行排序、查找和求元素和的程序。类模板的声明:constintSIZE=10;templateclassTclassArray{private:Ta[SIZE];public:Array();voidsort();intfind(Tk);Tsum();voidPrint();};(2)编写一个一维数组,无论整型还是其他类型,可以进行相同的操作:插入、删除、查找某一元素、排序等功能。类模板的声明:constintMAXSIZE=10;templateclassTclassArray{private:Ta[MAXSIZE];intlast;public:Array();intInsert(inti,Tx);intDel(inti);voidSort();intFind(Tk);voidPrint();};(3)用类模板实现将两个升序链表组成一个降序链表。数据元素可以是整型、实型。类模板的声明:constintMaxlen=15;templateclassTstructNode{Tdata;Node*next;};templateclassTclassLinkList{private:NodeT*head1;NodeT*head2;NodeT*head3;intn1,n2,n3;public:LinkList();voidCreateLinkList(NodeT*h);voidMerge();voidPrint_LinkList();};(4)用类模板实现栈,功能有:判断栈是否为空、入栈、出栈、读栈顶元素。类模板的声明:constintMAXSIZE=100;templateclassTclassStack{private:Tdata[MAXSIZE];inttop;public:Stack();intEmpty_SeqStack();intPush_SeqStack(Tx);TPop_SeqStack();};实验8输入/输出流1.实验目的(1)了解C++中输入/出流的架构与原理方法。(2)熟练掌握常用的输入/出函数、格式化数据输入/出方法。(3)理解掌握用户自定义数据类型的输入/出。(4)掌握顺序访问文件方式、随即访问文件方式。2.实验内容(1)输出九九乘法表,使用setw()控制“=”两边边的数值宽度,使得输出结果整齐。(2)编写程序,用于统计某文本文件中的单词个数。(3)编写程序,定义in为istream对象,定义out为ostream对象,从文件1中读取数据写入到文件2中。实验9异常处理1.实验目的(1)了解异常处理的原理方法。(2)熟练掌握异常处理的使用。(3)理解掌握捕获各种异常。2.实验内容(1)编写程序,在函数中抛出异常,在主程序中调用函数,并进行异常处理。(2)编写程序,再抛出异常处理。实验10综合实验1.实验目的(1)综合应用面向的程序设计方法。(2)熟练掌握VisualStudioC++2008编程工具。2.实验内容学习掌握课本第十二章的综合实例,在此基础上,实现图元的选取、拖动与排列。附录实验报告内容要求1.实验名称2.实验目的3.实验内容4.测试数据及预期结果5.程序(要求要有注释)6.源程序7.实验结果分析薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿羁膂莈蚅袇膁蒀蒈螃膀膀蚃虿腿节蒆羈芈莄蚁袄芈蒆蒄螀芇膆蚀蚆袃莈蒃蚂袂蒁螈羀袁膀薁袆袁芃螆螂袀莅蕿蚈衿蒇莂羇羈膇薇袃羇艿莀蝿羆蒂薆螅羅膁蒈蚁羅芄蚄罿羄莆蒇袅羃蒈蚂螁羂膈蒅蚇肁芀蚁薃肀莂蒃袂肀肂虿袈聿芄薂螄肈莇螇蚀肇葿薀罿肆腿莃袅肅芁薈螁膄莃莁蚇膄肃薇薃膃芅荿羁膂莈蚅袇膁蒀蒈螃膀膀蚃虿腿节蒆羈芈莄蚁袄芈蒆蒄螀芇膆蚀蚆袃莈蒃蚂袂蒁螈羀袁膀薁袆袁芃螆螂袀莅蕿蚈衿蒇莂羇羈膇薇袃羇艿莀蝿羆蒂薆