【问题标题】:Can't change the value of private member of a class using friend class无法使用朋友类更改类的私有成员的值
【发布时间】:2021-12-08 15:51:35
【问题描述】:

所以我正在尝试学习如何使用朋友类更改私有类成员的值,但是朋友类无法更改主类的值,这是我所做的代码,我是新人编码,请帮帮我:)

#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++ class friend-class


【解决方案1】:

在函数中:

show_A_marks(A teacher, int num)

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

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

请参阅What's the difference between passing by reference vs. passing by value? 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2015-03-06
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多