有如下程序:    #include<iostream>    using namespace std;    class Complex    {        double re, im;      public:        Complex(dou

admin2009-03-15  51

问题 有如下程序:    #include<iostream>    using namespace std;    class Complex    {        double re, im;      public:        Complex(double r, double i): re(r), im(i) {}        double real() const { return re; }        double image() const { return im; }        Complex& operator+= (Complex a)        {           re += a.re;           im += a.im;           return *this;        }    };        ostream& operator<<(ostream& s, const Complex& z)    {            remm s<<’(’<<z.real()<<’,’<<z.image()<<’)’;    }    int main()    {         Complex x(1,-2), y(2,3);        cout<<(x+=y)<<endl;        return 0;    }    执行这个程序的输出结果是

选项 A、(1,-2)
B、(2,3)
C、(3,5)
D、(3,1)

答案D

解析 本题考查了运算符重载的综合应用。解本题的关键是要弄明白cout<<(x+=y)<<endl;语句是怎么执行的。因为x和y都是Complex类的对象,而Complex类中已经重载了仁运算符,所以表达式x+=y就等价于x.operator+=(y)。该函数将y中的re、 im成员累加到x的对应成员之上,并返回x自身。故表达式(x+=y)返回的值是一个 Complex类对象,其内容为(3,1)。因为<<运算符的结合性是从左至右的,所以现在要计算的表达式是cout<<(x+=y),cout是C++语言中预定义的输出流类ostream的对象,所以<<运算符两边的分量类型正好符合上面<的重载函数,故其等价于函数调用operator<<(cout,(x+=y))。在<<的重载函数中输出结果是(3,1),最后函数返回并输出一个换行符endl,程序结束。故应该选择D。
转载请注明原文地址:https://kaotiyun.com/show/esjp777K
0

最新回复(0)