问答题 请使用VC6或使用【答题】菜单打开 proj3下的工程文件proj3,此工程包含一个源程序文件proj3.cpp,其中定义了用于表示二维向量的类MyVector;程序应当显示(6,8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:
(1)在“// **1** ****found****”的下方是构造函数的定义,它用参数提供的坐标对x和y进行初始化。
(2)在“// **2** ****found****”的下方是减法运算符函数定义中的一条语句。两个二维向量相减生成另一个二维向量:其X坐标等于两向量X坐标之差,其Y坐标等于两向量Y坐标之差。
(3)在“// **3** ****found*****”的下方,语句的功能是使变量v3获得新值,它等于向量v1与向量v2之和。
注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。
// proj3.cpp
#include <iostream >
using std::ostream;
using std::cout;
using std::endl;
class MyVector { //表示二维向量的类
double x; //X坐标值
double y; //Y坐标值
public:
MyVector (double i = 0.0, double j = 0.0); //构造函数
MyVector operator + (MyVector j); //重载运算符+
friend MyVector operator - (MyVector i, MyVector j); //重载运算符-
friend ostream& operator << (ostream& os, MyVector v); //重载运算符<<
};
// **1** *******found*******
______ (double i, double j): x(i),y(j) {}
MyVector MyVector::operator + (MyVector j) {
return MyVector (x + j. x, y + j. y);
}
MyVector operator - (MyVector i, MyVector j)
{// **2** *******found*******
return MyVector (______);
}
ostream& operator << (ostream& os, MyVector v) {
os << "("<< v.x << "," << v.y << ")"; //输出向量v的坐标
return os;
}
int main()
{
MyVector v1(2,3), v2(4,5), v3;
// **3** *******found*******
v3 =______;
cout << v3 << endl;
return 0;
}
【正确答案】
【答案解析】(1)MyVector::MyVector
(2)i.x-j.x,i.y-j.y
(3)v1+v2
答案考生文件夹 [考点] 本题考查二维向量类MyVector,其中涉及的知识点有构造函数,重载运算符+、-、<<。在类外定义构造函数时,语法和定义其他类函数一样,前面要加上类名和作用域符号。重载运算符函数要注意其返回值类型和参数类型。
[解析] (1)主要考查的是构造函数,在类外定义构造函数时要使用类名和作用域,即MyVector::MyVector。
(2)主要考查重载运算符“-”的返回语句,返回值应为向量i和j的差,即MyVector(i.x-j.x,i.y-j.y);。
(3)主要考查重载运算符“+”的使用,由题目可知v3是v1和v2的和,前面我们已经重新定义了运算符“+”,所以在这里直接使用语句v3=v1+v2;即可。