11427C++面向对象程序设计实验指导书.docx
《11427C++面向对象程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《11427C++面向对象程序设计实验指导书.docx(11页珍藏版)》请在冰豆网上搜索。
11427C++面向对象程序设计实验指导书
实验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(i{
if(temp[i]!
=sub_str.buffer[j])
{
buffer[k]=temp[i];
k++;
}
else
j++;
i++;
}
while(i{
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;
template
classArray
{
private:
Ta[SIZE];
public:
Array();
voidsort();
intfind(Tk);
Tsum();
voidPrint();
};
(2)编写一个一维数组,无论整型还是其他类型,可以进行相同的操作:
插入、删除、查找某一元素、排序等功能。
类模板的声明:
constintMAXSIZE=10;
template
classArray
{
private:
Ta[MAXSIZE];
intlast;
public:
Array();
intInsert(inti,Tx);
intDel(inti);
voidSort();
intFind(Tk);
voidPrint();
};
(3)用类模板实现将两个升序链表组成一个降序链表。
数据元素可以是整型、实型。
类模板的声明:
constintMaxlen=15;
template
structNode{
Tdata;
Node*next;
};
template
classLinkList
{
private:
Node*head1;
Node*head2;
Node*head3;
intn1,n2,n3;
public:
LinkList();
voidCreateLinkList(Node*h);
voidMerge();
voidPrint_LinkList();
};
(4)用类模板实现栈,功能有:
判断栈是否为空、入栈、出栈、读栈顶元素。
类模板的声明:
constintMAXSIZE=100;
template
classStack
{
private:
Tdata[MAXSIZE];
inttop;
public:
Stack();
intEmpt