为什么教程页面中的示例在构造函数中没有this关键字的情况下工作?
来自网站的代码:
#includeusing namespace std; class Rectangle { int width, height; public: Rectangle (); Rectangle (int,int); int getWidth() { return width; } }; Rectangle::Rectangle () { width = 5; height = 5; } Rectangle::Rectangle (int a, int b) { width = a; height = b; } int main () { Rectangle rect (3,4); Rectangle rectb; cout << "rect area: " << rect.getWidth() << endl; cout << "rectb area: " << rectb.getWidth() << endl; return 0; }
我的代码:
class Person { int age; std::string name; public: Person(); Person(int, std::string); std::string * getName() { return &name; } int * getAge() { return &age; } }; Person::Person () { age = 25; name = "John"; } Person::Person (int age, std::string name){ // This is the part : this->age = age; this->name = name; } int main() { Person john(45, "Doe"); printf("Name %d \n", *john.getAge() ); std::cout << "Age " << *john.getName() << std::endl; return 0; }
正如你在我的代码中看到的那样我必须使用this->name
,如果不这样做,则不会分配值.
另一方面,来自网站的示例代码可以使用或不使用 this->
为什么会这样?
问题是函数的参数与类具有相同的名称,因此除非您使用,否则编译器不知道您正在讨论哪一个this
.您可以通过更改变量的名称来解决此问题,也可以使用成员初始化列表
Person::Person (int age, std::string name) : name(name), age(age) {}
作为一个注释,我喜欢使用与类变量相同的名称,但_
在名称后添加一个以使其不同.所以在这种情况下我会做到:
Person::Person (int age_, std::string name_) : name(name_), age(age_) {}
这样可以更容易区分类成员和构造函数参数.