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
相关产品推荐
相关产品推荐

