Asialing 2021-11-27 23:20 采纳率: 81.8%
浏览 15
已结题

关于C++中成员函数中无法更改其他类成员数值问题

#include <iostream>
#include <string>
using namespace std;
/*
用c++友元进行两个类间数据交流,重载>>或者<<实现赋值
*/

//定义一个本身类,写明我的个人信息
class Me {
    friend class He;//建立友元关系
    friend ostream& operator<<(ostream& out, Me me);//与重载函数建立友元关系
    friend istream& operator>>(istream& in, Me &me);

public:

    Me() {
        age = 0 ; 
        name = " ";
    }

//private:


    int age;//我的年龄
    string name;//我的名字
    
};


//定义一个他类,让他说出我的个人信息
class He {
public:

    Me me;//声明me,如果放在成员函数中声明会导致数据丢失

    //认知函数,即朋友对我的认知
    void know() {
        
        cin >> me;
    }


    //说话函数
    void speak() {
        
        cout << "你的朋友告诉别人:" << endl;
        cout << me << endl;
    }

};

//声明全局重载>>函数
 istream& operator>>(istream& in, Me &me) {
     cout << "告诉朋友你的名字"<<endl;
     cin >> me.name;


     cout << "告诉朋友你的年龄"<<endl;
     cin >> me.age;

     return in;
}

//声明全局重载<<函数
ostream& operator<<(ostream& out, Me me) {
    
    
    out << "你叫:" << me.name << endl << "你的年龄:" << me.age << endl;

    return out;
}


void test() {

    He he;
    he.know();//朋友对我的认知
    he.speak();//朋友向别人介绍我
    
}

int main() {
    test();
    
    return 0;
}

**
以上的程序中,如果我把Me me;声明在know 和speak 函数中就无法更改me类中的age 和name 值.**

img

请问这是为什么? 上图就是我准备把Me me这行代码移动到的位置。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月5日
    • 创建了问题 11月27日

    悬赏问题

    • ¥15 django项目运行报编码错误
    • ¥15 请问这个是什么意思?
    • ¥15 STM32驱动继电器
    • ¥15 Windows server update services
    • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
    • ¥15 模糊pid与pid仿真结果几乎一样
    • ¥15 java的GUI的运用
    • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
    • ¥15 怎么配置广告联盟瀑布流
    • ¥15 Rstudio 保存代码闪退