3.2.2 填空题(1)
【例3.6】以下程序的执行结果是 。
- #include <iostream.h>
- class Sample
- { int n;
- public:
- Sample() {}
- Sample(int i) { n=i; }
- void add(Sample &s1,Sample s2)
- { this->n=s1.n+=s2.n; }
- void disp() { cout << "n=" << n << endl; }
- };
- void main()
- { Sample s1(2),s2(5),s3;
- s3.add(s1,s2);
- s1.disp();
- s2.disp();
- s3.disp();
- }
解:在调用s3.add(s1,s2)时,s3通过this指针改变了s3.n的值,而add成员函数的第一个形参是引用,所以s1.n也发生了改变。程序运行结果如下:
- n=7
- n=5
- n=7
【例3.7】以下程序的执行结果是 。
- #include <iostream.h>
- class Sample
- { int n;
- public:
- Sample() {}
- Sample(int i) { n=i; }
- void setn(int i) { n=i; }
- int getn() { return n; }
- void disp() { cout << "n=" << n << endl; }
- };
- Sample &add(Sample &s1,Sample s2)
- { s1.setn(s1.getn()+s2.getn());
- return s1;
- }
- void main()
- { Sample s1(2),s2(5),s3;
- s3=add(s1,s2);
- s1.disp();
- s2.disp();
- s3.disp();
- }
解:在执行s3=add(s1,s2)时,add函数的第一个形参是引用,所以s1.n发生了改变,s3通过add函数返回s1的引用而改变了s3.n的值。程序运行结果如下:
- n=7
- n=5
- n=7
【例3.8】以下程序的执行结果是 。
- #include <iostream.h>
- int f(int i)
- { return ++i; }
- int g(int &i)
- { return ++i; }
- void main()
- { int a,b;
- a=b=0;
- a+=f(g(a));
- b+=f(f(b));
- cout << "a=" << a << " b=" << b << endl;
- }
解:其中g()函数的参数是引用,f()函数的参数不是引用。执行a+=f(g(a))时,先执行f(g(a)),g(a)返回1,a=1,f(g(a))=f(1)=2,a=a+f(g(a))=1+2=3。执行b+=f(f(b))时,先执行f(f(b)),f(b)返回1,b=0,f(f(b))=f(1)=2,b=b+f(f(b))=0+2=2。本题答案为:a=3 b=2。
【例3.9】以下程序的执行结果是 。
- #include <iostream.h>
- int &max(int &x,int &y)
- { return (x>y x:y); }
- void main()
- { int n=2,m=10;
- max(n,m)--;
- cout << "n=" << n << ",m=" << m << endl;
- }
解:该程序中,max()函数的两个参数均为引用型,返回的也是引用型,所以可以执行max(n,m)--,其功能是将n、m中的较大者减1。程序运行结果是:n=2,m=9。