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

C++中friend函数能否操作对象成员?友元函数赋值私有成员失效问题

问题解答

你可以正常使用友元函数操作类对象的私有数据,当前代码功能失效和友元语法本身无关,是参数传递逻辑错误导致的。

根因分析

  • 当前updateRollNo和checkRollNo的入参都是值传递的Student对象,函数内部操作的是原对象的临时副本
  • updateRollNo修改的只是副本的roll_no属性,主函数中创建的原对象s1没有被任何改动
  • 调用checkRollNo时传入的也是s1的副本,输出的是未初始化的私有成员roll_no的垃圾值

修复方案

将两个函数的入参修改为引用类型,让函数直接操作原对象即可,优化后代码如下:

#include<iostream>
using namespace std ;

//前置声明
class Student ;
void updateRollNo(Student&);
void checkRollNo(const Student&);

//定义Student类
class Student{
    private :
    int roll_no ;

    //声明友元函数
    friend void updateRollNo(Student&);
    friend void checkRollNo(const Student&);
};
int main(){
    Student s1 ;
    updateRollNo(s1);
    checkRollNo(s1);
    cout<<"\n";
    return 0;
}

//定义updateRollNo函数
void updateRollNo(Student& stu){
    cout<<"\nEnter student Roll No : ";
    cin>>stu.roll_no ;
    cout<<endl ;
}

//定义checkRollNo函数
void checkRollNo(const Student& stu){
    cout<<"Roll No : "<<stu.roll_no ;
    cout<<endl;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:48:03