#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 值.**
请问这是为什么? 上图就是我准备把Me me这行代码移动到的位置。