当我将参数传递给构造函数并在正文中进行赋值时,我必须使用此指针,否则它将无法运行。
class Employee
{
public:
string name;
const char *id;
int age;
long salary;
Employee (string name,const char* id, int age, long salary)
{
this->name = name;
this->id = id;
this->age = age;
this->salary = salary;
};
};
但是,如果我使用其他方法,则不需要此指针。为什么会这样呢?Employee(string name,const char id[], int age, long salary): name(name),id(id),age(age),salary(salary)
{};
最佳答案
因为名称冲突。如果在示例中编写name = name
,则将本地变量 name
分配给它自己。
通过使用this
,您可以明确引用对象,从而明确声明要分配name
成员。
初始化程序列表起作用,因为只有成员可以出现在其中。但是考虑一下(假设)要使用成员id
初始化成员name
(不考虑参数)时会发生什么。在这种情况下,this->name
再次成为必需。
可以通过以不同的方式命名成员或参数来规避整个问题,例如m_
是一个常见约定:m_name = name
关于c++ - 在参数化构造函数中使用此指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62914636/