有如下程序:#include <iostream>using namespace std;class point{ int x, y;public: point( int vx, int vy ) { x = vx;

admin2010-12-16  33

问题 有如下程序:#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 ();    return 0;}     执行后的输出结果是

选项 A、10,10
B、20,20
C、10,20
D、30,30

答案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
转载请注明原文地址:https://kaotiyun.com/show/A1Vp777K
0

最新回复(0)