沧海一幻觉
(1)改正后的代码如下(改动的地方见注释)#include<iostream>using namespace std;class Animal;void SetValue(Animal&, int);void SetValue(Animal&,int, int);class Animal{public:friend void SetValue(Animal&, int);//这里setValue改成SetValuefriend void SetValue(Animal&, int,int);//这里加一个SetValue重载函数protected:int itsWeight;int itsAge;};void SetValue(Animal& ta, int tw){ta.itsWeight = tw;}void SetValue(Animal& ta, int tw, int tn){ta.itsWeight = tw;//这里ta.itsWeught改成ta.itsWeightta.itsAge = tn;}int main(){Animal peppy;SetValue(peppy, 5);SetValue(peppy, 7, 9);}(2)将上面程序中的友元改成普通函数后的代码如下(改动的地方见注释,不需要增加成员函数)#include<iostream>using namespace std;class Animal;void SetValue(Animal&, int);void SetValue(Animal&,int, int);class Animal{public:void SetValue(Animal&, int);//这里去掉friendvoid SetValue(Animal&, int,int);//这里去掉friendprotected:int itsWeight;int itsAge;};void Animal::SetValue(Animal& ta, int tw)//这里加类作用域{ta.itsWeight = tw;}void Animal::SetValue(Animal& ta, int tw, int tn)//这里加类作用域{ta.itsWeight = tw;ta.itsAge = tn;}int main(){Animal peppy;peppy.SetValue(peppy, 5);//这里函数名前加对象名peppy.SetValue(peppy, 7, 9);//这里函数名前加对象名}