C++,关于友元函数的题,如何用一个类的成员函数去作为其他函数的友元函数去控制更改其他函数的私有属性

定义一个学生类Student,其中有成绩数据成员;第一个教师类Teacher,其中有设置学生成绩的成员函数,该成员函数作为Student的友元函数。为什么可以用一个类的成... 定义一个学生类Student,其中有成绩数据成员;第一个教师类Teacher,其中有设置学生成绩的成员函数,该成员函数作为Student的友元函数。为什么可以用一个类的成员函数去作为其他函数的友元函数去控制更改其他函数的私有属性啊。我用成员对象去点取得时候无法在Teacher类里做到啊。这个程序应该怎么写? 展开
 我来答
xiarl
推荐于2016-09-14 · TA获得超过1460个赞
知道小有建树答主
回答量:884
采纳率:85%
帮助的人:273万
展开全部

是不是这样就行了:

class StudentT;//为了函数中的参数 ,需前置声明--①

class Teacher//--②
{
public:
void ChangeChji(StudentT & studentObj, double chji);

};


class StudentT//因为用的是Teacher的成员函数作为友元函数,StudentT必须能看到 Teacher类的定义 --③
{
friend void Teacher::ChangeChji(StudentT & studentObj, double chji);
private:
double chji;
};


void Teacher::ChangeChji(StudentT & studentObj, double chji)//因为函数定义里用到了StudentT的数据,所以必须能看到StudentT类的定义。--④
//当然,作为Teacher的方法,它也是必须能看到 Teacher类的定义才行
{
studentObj.chji = chji;
}

int main()
{
StudentT stuObj;
Teacher teObj;
teObj.ChangeChji(stuObj, 99.9);//其他构造函数、输出等函数,可以酌情扩充

return 0;
}

其实关键的就是那几个位置的摆放,(标号的①~④),这是写在一个cpp里,你用头文件,也是类似的。调试结果截图如下:

更多追问追答
追问

我将代码赋值粘贴到VS2013,结果,还是不能点取到Student类里的私有属性啊

追答
我就是vs2013啊
你能把代码整个贴我看看么?
或者私信我。。。
gz_chatbot
2015-04-20 · 超过85用户采纳过TA的回答
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:88.6万
展开全部
friend就是允许其他地方的修改权限
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式