#include<iostream.h>class A{ int a,b; static int c;public: A(int x) { a=x;} void f1(float x){ b=a*x;} static void setc(int x){c=x;} int f2(){ return a+b+c;} friend void f3(A &); //行C};int A::c=100;void f3(A &t) {t.c+=10;} //行Dvoid main(){ A a1(1000),a2(2000); //行A a1.f1(0.25); a2.f1(0.55); A::setc(400); //行B f3(a1); //行E cout<<"a1="<<a1.f2()<<'\t'<<"a2="<<a2.f2()<<'\n';}
根据代码回答问题:执行行A后,a1.c=,a2.c=,A::c=执行行B后,a1.c=,a2.c=_,A::c=行B可否改成“A::c=400;”?为什么?从行C中函数f3的原型看,行D的void前需不需要加上friend?C为类A的私有成员,但行D中为何通过t能访问c?执行行E后,a1.c=,a2.c=_,A::c=程序输出:_______________.上机验证输出结果。
A::setc(400);//行B
行B可否改成"A::c=400;"?不可以,这里不是初始化静态变量
friend void f3(A &); //行C
void f3(A &t) {t.c+=10;}//行D
行D的void前不需要加上friend
行D中为何通过t能访问c?因为f3()是类A的友元函数,可以访问到类A的私有成员
执行行A后:
a b c
a1 1000 845195130 100
a2 2000 4198400 100
执行行B后:
a b c
a1 1000 250 400
a2 2000 1100 400
执行行E后:
a b c
a1 1000 250 410
a2 2000 1100 410
最后输出:
a1=1660 a2=3510