C++考试题目,请会的朋友帮忙解释一下,非常感谢,关于重载OPERATOR
指出main变量i在每条赋值语句执行后的值intx=2,y=x+3;structA{intx;staticinty;public:operatorint(){return...
指出main变量i在每条赋值语句执行后的值
int x=2, y=x+3;struct A{ int x; static int y;public: operator int( ){ return x*y; } int &h(int &x){ for(int y=x; x<2*y; x+=5, y+=2) if (x>3*y+7) x-=y; return x; } A &operator ++( ){ x++; y++; return *this; } A(int x=3, int y=::y+2): x(x+::x) { this->y=y; }};int A::y=::y;void main( ){ A a(3,2), b(7), c; int i, &m=i, A::*p=&A::x; i=A::y; //i= m=b.x; //i= i=b.*p; //i= i=b+A(A(3)); //i= m=++a; //i= b.h(m)=9; //i= i=b.h(m)-c.x; //i=
不考虑程序运行,书面分析程序运行结果,我想知道每一步是怎么来的,非常感谢呢
上面那个混乱了,看这个图 展开
int x=2, y=x+3;struct A{ int x; static int y;public: operator int( ){ return x*y; } int &h(int &x){ for(int y=x; x<2*y; x+=5, y+=2) if (x>3*y+7) x-=y; return x; } A &operator ++( ){ x++; y++; return *this; } A(int x=3, int y=::y+2): x(x+::x) { this->y=y; }};int A::y=::y;void main( ){ A a(3,2), b(7), c; int i, &m=i, A::*p=&A::x; i=A::y; //i= m=b.x; //i= i=b.*p; //i= i=b+A(A(3)); //i= m=++a; //i= b.h(m)=9; //i= i=b.h(m)-c.x; //i=
不考虑程序运行,书面分析程序运行结果,我想知道每一步是怎么来的,非常感谢呢
上面那个混乱了,看这个图 展开
展开全部
这题目真难,考到好多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<<endl; //i = 7;
//9 这个调用了默认的初如化列表: 构造函数中的x=3,是一个默认参数
//由于b(7)调用了构造函数 且这里的 x赋值为7,::x 是全局的值为2 所以m = 7 + 2;
m=b.x;
cout<<"b.x "<<b.x<<endl; //i = 9;
// p保存了A中x的地址,而前面x的值为9.所以这晨打印的也是9
i = b.*p;
cout<<"b.*p "<<i<<endl; // i = 9;
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)) "<<i<<endl;
m = ++b; // i = 80 因为++b后 y = 10, x = 8;原理同上 隐式int() 返回8* 10
cout<<"++a "<<i<<endl;
//这个好理解,h()这个函数返回m的值,再赋值9,打印的当然是9
b.h(m) = 9;
cout<<"b.h(m) = 9 " <<i<<endl;
//把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 " <<i <<endl;
system("pause");
希望对你有所帮助。
也欢迎交流
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<<endl; //i = 7;
//9 这个调用了默认的初如化列表: 构造函数中的x=3,是一个默认参数
//由于b(7)调用了构造函数 且这里的 x赋值为7,::x 是全局的值为2 所以m = 7 + 2;
m=b.x;
cout<<"b.x "<<b.x<<endl; //i = 9;
// p保存了A中x的地址,而前面x的值为9.所以这晨打印的也是9
i = b.*p;
cout<<"b.*p "<<i<<endl; // i = 9;
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)) "<<i<<endl;
m = ++b; // i = 80 因为++b后 y = 10, x = 8;原理同上 隐式int() 返回8* 10
cout<<"++a "<<i<<endl;
//这个好理解,h()这个函数返回m的值,再赋值9,打印的当然是9
b.h(m) = 9;
cout<<"b.h(m) = 9 " <<i<<endl;
//把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 " <<i <<endl;
system("pause");
希望对你有所帮助。
也欢迎交流
追问
非常感谢啊,但是有个地方不明白.for(int y=x; x3*y+7) x-=y; return x; } ,这个for if语句怎么理解,还有上边那个返回m=54怎么来的...
追答
int &h(int &x){
for(int y=x; x3*y+7) {
x-=y;
}
}
return x;
}
只不过是只有一句,所以它没有套大括号而已啊。!
int& h(int&x) 这个传递的是引用,他就是当你们把X传进去的话,改变了的值直接是X的值啊。
在一个for 循环操作过后,X的值变了, 然后 return x啊!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询