要点时在构造函数的时候在函数名称右边的参数列表(那个括号)中构造一个指针。
#include <iostream>
using namespace std;
void wrongechange (int a ){
a=1;
}
void rightchange(int & a/*&a是a 的地址,之后函数中的a 是地址a之中a 的值————为什么&a a分不清楚,下文解答*/){
a=1;
}
int main(){
int hanshuA=0;
wrongechange(hanshuA);
cout<<hanshuA<<endl;
rightchange(hanshuA);
cout <<hanshuA<<endl;
}
0
1
--------------------------------
Process exited after 0.007158 seconds with return value 0 (0 ms cpu time, 828 KB mem used).
Press ANY key to exit...
为啥分不清楚&a 和a分不清楚,现在我来跟你说:
为什么我在用了&a 之后我们的函数就知道要更改a的地址上的a了?
因为,我们在主函数外面构造函数的时候,函数真正运行时,会自动生成一个局部变量,具体在运行的(int a)这一步,若我们选用int a则会在内存中再随便找出一块“空地”来生成这个变量a,在数值上是和原本的一样的。
但若是选择用int & a电脑就会在空地上生成一个指向主函数a的指针,简单来说就是这时候在空地上复制的是a的地址,a的地址有两份了。
这时候在我们构造的函数中,a的意思是:“ ‘&a’的指针所指向的变量 ”因此这时候就可以改变main函数中a 的值了。
定义名称上的值得注意的地方:
1.定义类(class)和成员函数时名字可以一样。
//部分函数
class myclass{
public:
myclass()
{
cout <<"hello world"<<endl;
}
}
2.不同成员函数的在参数列表不同时名字可以一样
//部分函数
class myclass{
public:
myclass()
{
cout <<"hello world"<<endl;
}
myclass(int a=0,int b=0){
cout<<a<<b<<endl;
}
}