当前位置:  开发笔记 > 编程语言 > 正文

除非指定"this"关键字,否则无法调用getter方法

如何解决《除非指定"this"关键字,否则无法调用getter方法》经验,为你挑选了1个好方法。

为什么教程页面中的示例在构造函数中没有this关键字的情况下工作?

来自网站的代码:

#include 
using 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->

为什么会这样?



1> NathanOliver..:

问题是函数的参数与类具有相同的名称,因此除非您使用,否则编译器不知道您正在讨论哪一个this.您可以通过更改变量的名称来解决此问题,也可以使用成员初始化列表

Person::Person (int age, std::string name) : name(name), age(age) {}

作为一个注释,我喜欢使用与类变量相同的名称,但_在名称后添加一个以使其不同.所以在这种情况下我会做到:

Person::Person (int age_, std::string name_) : name(name_), age(age_) {}

这样可以更容易区分类成员和构造函数参数.


@Ferrante一半,请使用会员初始化列表.
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有