关于static局部变量

以两段代码为例

#include <iostream>
using namespace std;
class Number {
public: 
    int num;
    Number(int n): num(n) {}
    Number(Number & _this){
    	num = _this.num;
    	//cout << _this.num << num << endl;
	}
	/*Number (int & n){
		num = n;
	}*/
	bool operator == (Number & x) {
		return (x.num == num);
	}
	bool operator == (int x) {
		return (x == num);
	}
	friend Number & operator * (Number& x2, int x1) {
		static Number sum( x2.num * x1);
		return sum;
	}
	friend bool operator == (int x1, Number x2) {
		return (x1 == x2.num);
	}
	friend ostream & operator << (ostream & cout, Number & x) {
		cout << x.num;
		return cout;
	}
// 在此处补充你的代码
};
int main() {
	int t;
	int m,n;
	cin >> t;
	while(t--) {
	    cin >> m>> n;
	    Number n1(m), n2 = n1 * n;
	    if( m * n == n2 )
	    	cout << n2 << endl;
	}
    return 0;
}

这段代码在样例数大于1 的时候后面不会输出。原因是,在*的重载那里,sum局部对象已经建立,后面就不会执行static那句,从而不会更新它的num值了。

	friend Number & operator * (Number& x2, int x1) {
		static Number sum(0);
		sum.num = x2.num * x1;
		return sum;
		//return Number ( x1 * x2.num);
	}

这样就没问题了。

猜你喜欢

转载自blog.csdn.net/weixin_44288817/article/details/90291674