c++ - 在参数化构造函数中使用此指针

标签 c++ oop

当我将参数传递给构造函数并在正文中进行赋值时,我必须使用此指针,否则它将无法运行。

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/

相关文章:

javascript - 在 Javascript 中引用对象属性

c++ - 崩溃,可能是由于构造函数或析构函数中的某些问题

c++ - CGAL Constrained_Delaunay_Triangulation 和 Triangulation_vertex_base_with_info

c++ - 在 C++ 中访问不同类中的类的成员

java - JAVA中优先级队列的比较

c++ - 我认为我的析构函数导致错误发生。你能帮我弄清楚为什么吗?

c++ - 前向迭代器 iterator_traits::reference 的要求

c++ - 可实例化类的线程过程?

c++ - 无法从 gethostname 访问 IP 地址的内存

c++ - 如何更好地编写这个C++程序