1 回答

TA贡献1824条经验 获得超5个赞
(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改成SetValue
friend 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.itsWeight
ta.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);//这里去掉friend
void SetValue(Animal&, int,int);//这里去掉friend
protected:
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);//这里函数名前加对象名
}
添加回答
举报