计算机与电子工程系实训课任务单
课程名称:C/C++语言程序设计上课时间:周星期节教师姓名:蔡茜班级名称:11级软件班本任务课时安排:2课时
教学组织形式:任务驱动,理实结合,讲练结合、教学做一体化
任务十二:运算符的重载——复数运算
任务要求:
1、理解运算符重载的概念
2、掌握运算符重载的定义(双目运算符和单目运算符的重载)
3、掌握运算符重载的形式(作为类的成员函数和友元函数)
4、掌握常见运算符的重载方式
任务描述:
1、定义复数类CComplex
2、为复数类添加“+”运算符重载函数作为成员函数
3、在主函数中测试“+”运算符的功能
4、修改“+”运算符重载函数作为复数类的友元函数
5、在主函数中重新测试“+”运算符的功能相关知识点
任务环境:
Windows系统电脑,Visual C++ 6.0,IE 6.5以上浏览器
任务实施:
步骤一定义一个复数类CComplex
//CComplex.h
class CComplex
{
private:
//定义复数的实部和虚部
double real;
double imag;
public:
CComplex(double x=0.0,double y=0.0);//定义带默认参数的构造函数
void print();
};
//CComplex.cpp
CComplex::CComplex(double x,double y)
{
real=x;
imag=y;
}
CComplex CComplex::operator +(CComplex &c)
{
CComplex t;
t.real= real+c.real;//等价于t.real=this->real+c.real;
t.imag= imag+c.imag;//等价于t.imag=this->imag+c.imag;
return t;
}
void CComplex::print()
{
cout<<'('< } 步骤二定义“+”运算符重载函数为成员函数 CComplex operator+(CComplex &c)//定义“+”运算符重载函数为成员函数,只带一个参数{ CComplex t; t.real=this->real+c.real; t.imag=this->imag+c.imag; return t; } 步骤三在主函数测试复数类的“+”运算符重载 #include "Complex.h" void main() { CComplex a(3.0,4.0),b(10.5,20.5),c; c=a+b//等价于c=a.operator +(b); c.print(); } 步骤四修改“+”运算符重载函数为类的友元函数 //Complex.h文件 class CComplex { private: //定义复数的实部和虚部 double real; double imag; public: CComplex(double x=0.0,double y=0.0); friend CComplex operator+(CComplex &x,CComplex &y); void print(); }; //Complex.cpp文件 修改原来的运算符重载函数为: CComplex operator +(CComplex &x,CComplex &y)//两个参数 { CComplex t; t.real=x.real+y.real; t.imag=x.imag+y.imag; return t; } 注意:双目运算符重载作为友元函数时需要指定两个参数,而作为成员函数时只需要指定一个参数。 任务总结: (1)运算符重载的定义: 函数类型 operator运算符(参数列表) { 函数体 } (2)在对运算符进行重载过程中应遵循如下规则: ●用户不可以自己定义新的运算符,只能对已有的C++运算符进行重载。 ●重载不能改变运算符运算对象(即操作数)的个数,即单目运算符只能重载为单目运算符,多目运算符只能重载为多目运算符。 ●重载不能改变运算符的优先级和结合性。 ●重载运算符的功能应与该运算符作用于标准类型数据时所实现的功能类似,否则会影响程序的可读性。 (3)双目运算符重载作为友元函数时需要指定两个参数,而作为成员函数时只需要指定一个参数。 拓展实训内容(安排学时:2学时) 实训一教研室的人员们 任务描述: 定义点坐标类Point,重载++(自增)运算符实现横纵坐标值均加1,重载--(自减)实现横纵坐标值均减1。 具体要求: (1)坐标类Point包含数据成员有横坐标值和纵坐标值; (2)坐标类Point包含能够初始化横纵坐标值的构造函数,在没有给定坐标点的横纵坐标值时,默认都 为0; (3)坐标类Point包含能够显示出横纵坐标值的函数show( );(4)在main函数中测试坐标类对象执行++,--运算后的值。