以下是一个例子:
“ArrayList.cpp”
.....
...
..
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
......
....
..
void Stack::push(employee e)
{
pos++;
employeeList[pos] = e;
}
......
....
..
“ArrayList.h”
.......
.....
..
struct employee
{
string name, surname;
int age;
};
class Stack
{
public:
employee employeeList[1000];
int pos =-1;
public:
bool isEmpty();
void push(employee e);
....
......
........
在putSurname函数中,为什么我必须通过引用传递变量employee才能看到employeeList数组中的更改?
通过引用传递变量的目的是每次调用函数时该变量的内存中的位置是否发生变化,所以每次都分配不同的存储变量?
答案 0 :(得分:2)
让我们假设以下情况。
employee emp;
employee& e2 = emp;
然后,e2
成为emp
的引用变量。您可以使用e2
更改对象emp
。
考虑您的putSurname
方法
void Stack::putSurname(employee& e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您必须按以下方式调用该功能。
employee emp;
putSurname(emp);
然后在您的方法putSurname
中,e
将充当emp
的引用变量,您对e
所做的任何更改都将反映到emp
}}
如果您的方法如下。
void Stack::putSurname(employee e)
{
cout<<"Insert SURNAME"<< endl;
cin >> e.surname;
}
您仍然可以将方法调用为
employee emp;
putSurname(emp);
但是在这里,该函数将创建emp
员工对象的副本(按值传递)以执行其任务。然后你知道,因为它是副本,所以更改不会反映回emp
。并且该函数执行后将从堆栈中删除该变量。然后你将失去所做的任何改变。
希望这有帮助。