return0;
}
intadd(inta,intb)
{
intc;
c=a+b;
returnc;
}
2)分别编写四个同名函数maxl,实现函数重载,在main()函数中测试函数功能。
程序名:
lab1_2.cpp。
3)编写矩阵转置函数,输人参数为3X3整型数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。
程序名:
lab1_3.cpp。
4)改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。
通过debug观察指针的内容及其所指的对象中的内容。
程序名:
lab1_4.cpp。
5)编写程序lab1_5.cpp,使用voidmain(intargc,char*argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作,使用read()和write()成员函数读入数据,使用输出流对象输出数据到文件和屏幕。
6)使用debug中的StepInto追踪到函数内部,观察函数的调用过程。
5.实验思考题
1)重载函数是通过什么来区分?
2)new和delete操作符与C语言中的malloc()和free()函数有何异同点?
3)C++提供的输入输出操作与C语言的输入输出操作的异同点?
4)什么是流?
使用流有那些好处?
5)C++与定义了那些流?
他们分别与什么设备相连?
实验2类和对象(4学时)
1.实验目的
1)学习类与对象的定义。
2)掌握类与对象的使用方法。
3)学习类和对象的声明。
4)学习具有不同属性的数据成员与成员函数的访问方式。
5)理解构造函数和析构函数的定义与执行过程。
6)学会类的聚集使用方法。
7)理解静态数据成员和静态成员函数的含义。
8)理解什么是运算符重载,掌握运算符重载的方法。
2.实验类型
设计型。
3.实验基本要求
1)下面是“平面上点”类的定义:
classCPoint
{
private:
intx,y;
staticintnCount;//nCount用于保存点的个数
public:
CPoint(intpx=0,intpy=0);
CPoint(CPoint&);
~CPoint();
intGetX();
intGetY();
voidSetX(int);
voidSetY(int);
voidShowPoint();
};
请完成该类中各成员函数的定义。
2)下面是“平面上线段”类的定义:
classCLine
{
private:
CPointpt1,pt2;//pt1和pt2分别代表该线段的起点和终点
public:
CLine();
CLine(intx1,inty1,intx2,inty2);
CLine(CPointp1,CPointp2);
doubleDistance();//计算该线段长度的成员函数
voidShowLine();
};
请完成该类中各成员函数的定义。
并利用VC调试工具观察含有组合关系类的构造函数和析构函数的执行情况。
3)以成员函数的方式,重载题目1中的CPoint类的“+”运算符,返回的CPoint类对象的横纵坐标值分别等于原两点的横纵坐标值之和;以全局函数的方式重载CPoint类的“-”运算符,返回的CPoint类对象的横纵坐标值分别等于原两点的横纵坐标值之差。
4)对于题目1中的CPoint类,重载“>>”运算符使得像cin等输入流对象能够写CPoint类对象,再重载“<<”运算符使得像cout等输出流对象能够输出CPoint类对象。
4.实验基本步骤
1)该类是一个基本的类。
在编写该类时,要注意对静态成员nCount的操作,使其能够正确表示程序中点的个数。
编完该类后,要在main()函数中进行测试,分别定义CPoint类的对象、指针、引用,对各成员函数进行调用。
分析对静态成员的调用和一般成员的调用方式有什么不同。
2)要思考如何对类中3个构造函数CLine(),CLine(intx1,inty1,intx2,inty2)和CLine(CPointp1,CPointp2);的编写,分析什么是初始化列表。
完成后要在main()中进行测试。
3)以成员函数方式重载的“+”操作符的原型为:
CPointCPoint:
:
operator+(CPointpt);以全局函数方式重载的“-”操作符的原型为:
CPointoperator-(CPointpt1,CPointpt2);分析以成员函数方式和全局函数方式重载运行符的异同点。
4)重载的“>>”操作符的原型为:
istream&operator>>(istream&,CPoint&);重载的“<<”操作符的原型为:
ostream&operator>>(ostream&,CPoint);思考一下,重载的“>>”操作符和“<<”操作符能否作为CPoint类的成员函数来实现。
5.实验思考题
1)类和结构体的区别是什么?
2)类的成员函数与普通的函数有何区别?
3)构造函数和析构函数的作用是什么?
4)类的访问控制权限有何意义?
5)什么是封装?
类是如何进行封装的?
6)类的静态成员函数和普通成员函数有什么不同?
7)根据自己的理解叙述运算符重载的作用?
实验3继承与多态(4学时)
1.实验目的
1)学习定义和使用类的继承关系,定义派生类。
2)熟悉不同继承方式下对基类成员的访问控制。
3)学习使用虚函数实现动态多态性。
4)学习利用虚基类解决二义性问题。
2.实验类型
设计型。
3.实验基本要求
1)使用实验2中的CPoint类,定义“空间中点”类如下:
classCThreePoint:
publicCPoint
{
private:
intz;
public:
CThreePoint();
CThreePoint(int,int,int);
intGetZ();
voidSetZ(intpz);
virtualvoidShowPoint();
};
请完成该类中各成员函数的定义。
并利用VC调试工具观察含有继承关系类的构造函数和析构函数的执行情况。
分析为什么要把ShowPoint()函数设置为虚函数?
有什么作用?
请在main()函数中做测试。
2)下面是一个“Shape”基类的定义:
enumColorType{White,Black,Red,Green,Blue,Yellow,Magenta,Cyan};
//为图形形状定义Shape基类
class Shape
{
protected:
ColorType color;
public:
Shape(ColorTypec);
virtualvoiddraw();
};
使用Shape类和CPoint类设计一个可在屏幕上作图的简单实例,要求是不必真正在屏幕上实现作图,只是有一个示意即可。
例如:
画一个矩形,不必真正画出矩形,只需输出一句话:
“Thisisarectangle!
”即可。
要求可画线段、矩形和圆形。
要用到继承,虚函数,多态,数据的封装,构造函数的实现等等各种面向对象程序设计的特性。
3)定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。
自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。
从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。
观察虚函数的作用。
在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?
编程试试看。