#include <iostream>
#include <string>
using namespace std;
// 定义一个类 Student
class Student
{
private:
string name;
int age;
string address;
public:
// 存
void setname(string s){ name = s;}
void setage(int y){age = y; }
void setaddress(string add){address = add;}
// 取
string getname(){return name;}
int getage(){return age;}
string getaddress(){return address;}
protected:
};
// 独立函数,引用 作为形参
void SetStudent(Student & xs,string name,int age,string addr){
xs.setname(name);
xs.setage(age);
xs.setaddress(addr);
}
// 独立函数,同样使用 引用 作为形参
void Show(Student & x){
cout<<"姓名: "<<x.getname()<<" 年龄: "<<x.getage()<<" 住址: "<<x.getaddress()<<endl;
}
int main(void)
{
Student x; // 定义一个Student 对象x
//虽然形参是引用,调用的时候直接用对象作为实参
// 等同于引用的定义 "Student & nx = x;",定义的时候就必须赋值
SetStudent(x,"柳絮飘",22,"学明路115号");
Show(x);
// 引用到底是啥玩意? 把他们的地址输出来看看
// 定义一个引用 nx, C++ 引用在定义的时候必须付初始值,这点与指针不同
// 指针在定义的时候可以不赋值,但最好给它顺手赋NULL,以免乱指
Student & nx = x;
cout<<"对象x的地址是 :"<<&x<<endl; // 结果是 0012FF50
cout<<"引用nx的地址是:"<<&nx<<endl; // 结果也是 0012FF50,说明与对象是同一个地址.就是同一个东西了.
SetStudent(nx,"张生民",23,"琴海路136号"); //用引用nx作为实参,并修改后3个参数
Show(nx);
// 上述对引用nx的操作,实际就是对x的操作.
Show(x); // 在次调用x,这是发行x已经被修改了,说明nx就是x
// --------------------
return 0;
}
// --