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

admin2010-03-29  25

问题 有如下程序:     #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 pl )        {           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 pl ( 10, 10 ), p2 ( 20, 20 );        p1 = p1 + p2;        p1.print ();        return 0;    }    执行后的输出结果是(   )。

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

答案8

解析 本题主要考察C++中运算符重载的机制与实现。运算符重载函数一般分为成员函数形式和友元函数形式,这两种形式都可以访问类中的私有成员。本题中的运算符重载形式为成员函数形式。 程序在类point中声明了私有数据成员int x和int y,并定义了两种形式的构造函数以完成对对象的初始化:之后,程序对运算符“+”进行了重载,令其输入参数为类 point的对象,输出为操作符“+”右侧该对象的私有数据成员x和y与操作符“+”左侧同类型对象的私有数据成员x和y的两数之和;print()函数则输出对象中数据成员的值。主函数中,实例化了类point的两个对象p1和p2,并完成对对象的初始化。在语句“p1=p1+p2;”中,由于操作符“+”左右两端的操作数为point类的对象,复合类 point定义中的操作符“+”的重载函数,因此程序将调用重载后的操作符函数,并返回两point对象数据成员的加和值,覆盖对象p1的数据成员。因此print()函数输出对象p1的数据成员值应该为:x=10+20=30,y=10+20=30。
转载请注明原文地址:https://kaotiyun.com/show/jFjp777K
0

最新回复(0)