C++面向对象程序设计实验指导书 实验四
a. 该类包含两个整型成员变量x(横坐标)和y(纵坐标),以及一个输出函数Print()用来输出横坐标和纵坐标,要求不可以在类的外部直接访问成员变量; b.可以采用没有参数的构造函数初始化对象,此时的成员变量采用默认值0; c.可以采用直接输入参数的方式来初始化该类的成员变量; d.可以采用其它的CPoint对象来初始化该类的成员变量; e.设计一个主函数来测试以上功能。
4.3思考题
1.设计一个CStudent(学生)类,并使CStudent类具有以下特点: a.该类具有学生姓名、学号、程序设计、信号处理、数据结构三门课程的成绩; b.学生全部信息由键盘输入,以提高程序的适应性; c.通过成员函数统计学生平均成绩,当课程数量增加时,成员函数无须修改仍可以求取平均成绩; d.输出学生的基本信息、各科成绩与平均成绩; e.学生对象的定义采用对象数组实现; f.统计不及格学生人数。
13
C++面向对象程序设计实验指导书 实验五
实验五 运算符重载
5.1 实验目的
(1) 进一步了解运算符重载的概念和使用方法。 (2) 掌握几种常用的运算符重载的方法。 (3) 了解转换构造函数的使用方法。
(4) 了解在Vi s ual C++ 6.0 环境下进行运算符重载要注意的问题。
5.2 实验内容 5.2.1程序阅读
1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include
public:
CComplex() { real = 0; imag = 0; }
CComplex(int x,int y) { real = x; imag = y; }
int real; int imag;
CComplex operator + (CComplex obj1)-----------------------------------------------① { CComplex obj2(real + obj1.real, imag + obj1.imag); return obj2; } };
14
C++面向对象程序设计实验指导书 实验五
void main() {
CComplex obj1(100,30); CComplex obj2(20, 30); CComplex obj;
obj = obj1+obj2; ------------------------------------------------------------------② cout << obj.real < 问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型? 答: 问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数? 答: 2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include public: CComplex() { real = 0.0; imag = 0.0; } CComplex(float x, float y) { real = x; imag = y; } CComplex operator + (CComplex &obj1, CComplex &obj2) { CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag); return obj3; } CComplex &operator++(CComplex &obj) { obj.real += 1; obj.imag +=1; return obj; } 15 C++面向对象程序设计实验指导书 实验五 void print() { cout< float real; float imag; }; CComplex &operator--(CComplex &x) { x.real -= 1; x.imag -= 1; return x; } void main() { CComplex obj1(2.1,3.2); CComplex obj2(3.6,2.5); cout<<\ obj1.print(); cout<<\ obj2.print(); CComplex obj3 = obj1 + obj2; cout<<\ obj3.print(); ++obj3; cout<<\ obj3.print(); --obj3; cout<<\ obj3.print(); CComplex obj4 = ++obj3; cout<<\ obj4.print(); } 问题一:以上程序中的三个运算符重载都有错误,试改正过来,并分析该程序的输出结果。 答: 5.2.2 程序设计 1. 在以上复数类的基础上,增加重载运算符乘“*”、除“/”,实现复数的乘除运算。 16 C++面向对象程序设计实验指导书 实验五 2. 有两个矩阵a 和b ,均为2 行3 列。求两个矩阵之和。重载运算符\,使之能用于矩阵相加. 如c=a+b, 本题是< C++面向对象程序设计》第4 章第4 题。 5.3思考题 1.定义CPoint类,有两个成员变量:横坐标(x)和纵坐标(y),对CPoint类重载“++”(自增运算符)、“--”(自减运算符),实现对坐标值的改变。 17