首页 > 解决方案 > Friend函数可以操作对象成员吗?

问题描述

我正在尝试使用 updateRollNo() 函数为对象成员设置值。但它不起作用,我可以使用朋友功能来操作对象数据吗?如果我使用的是学生类成员,那么它工作得很好,但它不能与朋友功能一起工作。

#include<iostream>
using namespace std ;

//Forward declaration
class Student ;
void updateRollNo(Student);
void checkRollNo(Student);

//Define class Student
class Student{
    private :
    int roll_no ;

    //Make friend function
    friend void updateRollNo(Student);
    friend void checkRollNo(Student);
};
int main(){

    Student s1 ;
    updateRollNo(s1);
    checkRollNo(s1);

    cout<<"\n\n";
    return 0;
}


//Define function updateRollNo()

void updateRollNo(Student stu){
    cout<<"\nEnter student Roll No : ";
    cin>>stu.roll_no ;
    cout<<endl ;
}


//Define function checkRollNo()

void checkRollNo(Student stu){
    cout<<"Roll No : "<<stu.roll_no ;
    cout<<endl;
}


标签: c++

解决方案


您的问题与friend关键字无关(工作正常);问题是您将Student对象按值传递到updateRollNo()中,这意味着当内部代码updateRollNo()设置roll_no成员变量时,它会将成员变量设置在本地副本 ( stu) 上,而不是在来自的s1对象上main()。这就是为什么,当您随后尝试打印出内部的值时checkRollNo(),您会发现您打印的值仍然未设置/未初始化。

获得所需行为的一种简单方法是修改updateRollNo()以通过引用传递参数;也就是说,替换所有实例

void updateRollNo(Student);

void updateRollNo(Student &);

这样,它将s1直接更新,而不是更新s1.


推荐阅读