这题目真难,考到好多C++的原理。细节。 总算搞定了。但是调试了好几次
A a(3,2), b(7), c;
int i, &m = i, A::*p = &A::x;
i = A::y;
//这个打印的是A::中y 是由于b(7)调用了其中的构造函数 本来全局域中的y=5
//int y = ::y + 2 所是是5+2
cout<<"A::y " << i<
//由于b(7)调用了构造函数 且这里的 x赋值为7,::x 是全局的值为2 所以m = 7 + 2;
m=b.x;
cout<<"b.x "<
i = b.*p;
cout<<"b.*p "<int t = A(A(3)); //这个值是35 因为上面重载了int()这个操作符 A(3)=》 x = 5 外面的A()会把A(3)的值隐式转换为 int 调用 int()这个函数 此时 y=7见上面。 所以返回 5*7;
//这里的b值中(y =9.x=7) 由于是两个A类相加 所以全部隐式转换为int 调用int()这个函数
//返回 7*9的值。
i = b + A(A(3)); // i = 63 + 35
cout<<"b+A(A(3)) "<m = ++b; // i = 80 因为++b后 y = 10, x = 8;原理同上 隐式int() 返回8* 10
cout<<"++a "<//这个好理解,h()这个函数返回m的值,再赋值9,打印的当然是9
b.h(m) = 9;
cout<<"b.h(m) = 9 " <//把m=9代入到h(9)这个函数中 返回的m=54 c.x = 5( 3+2) => i=49;
i = b.h(m) - c.x;
cout<<"b.h(m) - c.x " <system("pause");
希望对你有所帮助。
也欢迎交流