单选题
有如下程序:
#include<iostream>
using namespace std;
class point
int x,y;
public:
point(int vx,int vy)
x=vx;
y=vy;
point()
x=0;
y=0;
point operator+(point p1)
point p;
int px=x+p1.x;
int py=y+p1.y;
return point(px,py);
point operator-(point p1)
point p;
int px=x-p1.x;
int py=y-p1.y;
return point(px,py);
void print()
cout<<x<<","<<y<<end1;
;
int main()
point p1(10,10),p2(20,20);
p1=p1+p2;
p1.print();
retrun 0;
执行后的输出结果是
【正确答案】
D
【答案解析】[解析] 本题主要考查C++中运算符重载的机制与实现。运算符重载函数一般分为成员函数形式和友元函数形式,这两种形式都可以访问类中的私有成员。本题中的运算符重载形式为成员函数形式。
程序在类point中声明了私有数据成员int x和int y,并定义了两种形式的构造函数以完成对对象的初始化;之后,程序对运算符“+”进行了重载,另其输入参数为类point的对象,输出为操作符“+”右侧该对象的私有数据成员x和y与操作符“+”左侧同类型对象的私有数据成员x和y的加和:print()函数则输出对象中数据成员的值。程序main()函数中,实例化了类point的两个对象p1和p2,并完成对对象的初始化。在语句“p1=p1+p2;”中,由于操作符“+”左右两端的操作数为point类的对象,复合类point定义中的操作符“+”的重载函数,因此程序将调用重载后的操作符函数,并返回两point对象数据成员的加和值,覆盖对象p1的数据成员。因此print()函数输出对象p1的数据成员值应该为:x=10+20=30,y=10+20=30