1 this指针
请先看代码:
#include <iostream>
using namespace std;
class student
{
public:
char* name;
int age;
student(){
name = "FreeBamb";
age = 20;
}
//与默认无参构造函数重载
student(char* pName, int i_age){
name = pName;
age = i_age;
}
void output(){
cout << name << endl << age << endl;
}
void input(char* name, int age){
name = name;
age = age;
}
};
void main(){
student stu("FreeBamb", 20);
stu.input("FreeBamb2", 40);
stu.output();
system("pause");
}
运行结果:
我们可能会认为,在input(char* name, int age)函数中,利用形参name 和 age对stu类中的成员变量name 和 age进行了赋值,然后事实是
因为变量的可见性,student类中name和age在inout(char* name,int age)这个函数中是不可见,所以没有改变了student中的值。
在这种情况下,我们可以利用c++提供的一个特殊的指针this来完成这个工作,this指针是个隐含指针它是指向对象本身的,代表了对象的地址。
我们重写input(char* name,int age)函数,代码如下:
#include <iostream>
using namespace std;
class student
{
public:
char* name;
int age;
student(){
name = "FreeBamb";
age = 20;
}
//与默认无参构造函数重载
student(char* pName, int i_age){
name = pName;
age = i_age;
}
void output(){
cout << name << endl << age << endl;
}
void input(char* name, int age){
this->name = name;
this->age = age;
}
};
void main(){
student stu("FreeBamb", 20);
stu.input("FreeBamb2", 40);
stu.output();
system("pause");
}
运行结果:
此时的结果就是我们想要的了。