You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++使用友元类无法修改类private私有成员值问题求解

问题根因

你代码中的友元类声明完全合法,无法修改私有成员的问题和友元权限无关,问题出在B::show_A_marks的参数传递方式:

  • 你当前的参数写法show_A_marks(A teacher, int num)是值传递,调用函数时会拷贝生成一个临时的A类对象,函数内修改的是这个临时副本的marks值,函数执行结束后副本就销毁了,完全不会影响main函数里的原teacher对象。

修复方案

只需要把show_A_marks的第一个参数改成引用传递即可,引用会直接绑定到原对象,修改操作会作用到原对象上。另外补充规范说明:你的代码里所有成员函数都没有声明返回值类型,属于不规范的写法,标准C++要求无返回值的函数必须显式声明void返回类型,否则部分高版本编译器会报错。

修正后的完整代码

#include <iostream>
using namespace std;

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

class B{
public:
    // 第一个参数改为引用传递
    void 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();
    return 0;
}

运行输出

10
20

内容的提问来源于stack exchange,提问作者TOUSHIF HOSSAIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:09:01