无法使用好友类更改类的私有成员的值

Can't change the value of private member of a class using friend class

提问人:TOUSHIF HOSSAIN 提问时间:10/22/2021 更新时间:10/22/2021 访问量:162

问:

所以我试图学习如何使用朋友类更改私有类成员的值,但是朋友类无法更改主类的值,这是我完成的代码,我是编码领域的新手,请帮助我:)

#include <iostream>
using namespace std;

class A {
private:
    int marks;
    
    public:
    show_marks()
    {
        cout <<marks;
    }
    set_marks( int num )
    {
        marks =num;
    }
    
    
    friend class B;

};
class B{

    public:
    
    show_A_marks(A teacher, int num){
    teacher.marks= num;
    }
};
int main(){
    A teacher;
    teacher.set_marks(10);
     teacher.show_marks();

     cout <<endl;
     
     B student;
     student.show_A_marks(teacher,20);
     teacher.show_marks();
}

-这应该打印: 10 20 但正在打印: 10 10

C++ friend-class

评论

2赞 Eljay 10/22/2021
teacher 参数是按值传递的,而不是按引用传递的。正在修改参数副本,但未修改原始参数。

答:

2赞 Fantastic Mr Fox 10/22/2021 #1

在函数中:

show_A_marks(A teacher, int num)

您正在按值传递。您正在创建该值的副本,并编辑该副本。当函数返回时,副本将消失。您需要通过引用传递它:teacher

show_A_marks(A& teacher, int num)
//            ^ reference to A

有关详细信息,请参阅按引用传递与按值传递之间有什么区别?