Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 除非指定";否则无法调用getter方法;这";关键词_C++ - Fatal编程技术网

C++ 除非指定";否则无法调用getter方法;这";关键词

C++ 除非指定";否则无法调用getter方法;这";关键词,c++,C++,为什么教程页面中的示例在构造函数中没有this关键字的情况下工作 网站上的代码: #include <iostream> using namespace std; class Rectangle { int width, height; public: Rectangle (); Rectangle (int,int); int getWidth() { return width; } }; Rectangle::Recta

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

网站上的代码:

#include <iostream>
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;
}
#包括
使用名称空间std;
类矩形{
int宽度、高度;
公众:
矩形();
矩形(int,int);
int getWidth(){
返回宽度;
}
};
矩形::矩形(){
宽度=5;
高度=5;
}
矩形::矩形(int a,int b){
宽度=a;
高度=b;
}
int main(){
矩形矩形矩形(3,4);
矩形矩形矩形B;
库特
因为您的私有变量名为name,而您发送的变量也名为name,所以可以使用此->指定您正在使用的名为name的变量


因为您的私有变量名为name,而您发送的变量也名为name,所以您可以使用此->来指定您正在使用的名为name的变量。

问题在于函数的参数与类同名,因此编译器不知道您在说哪个变量,除非您使用
>。您可以通过更改变量名称或使用成员初始化列表来解决此问题

Person::Person (int age, std::string name) : name(name), age(age) {}
请注意,我喜欢使用与类变量相同的名称,但在名称后添加一个
\uuu
,以使其不同。因此,在这种情况下,我会执行以下操作:

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

这使得区分类成员和构造函数参数变得更容易。

问题是函数的参数与类的名称相同,因此编译器不知道您在谈论哪一个,除非您使用
This
。您可以通过更改变量的名称或可以使用成员初始化列表

Person::Person (int age, std::string name) : name(name), age(age) {}
请注意,我喜欢使用与类变量相同的名称,但在名称后添加一个
\uuu
,以使其不同。因此,在这种情况下,我会执行以下操作:

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

这使得区分类成员和构造函数参数变得更容易。

否则编译器将如何区分在参数列表中定义的
age
name
是类成员的
age和
name
呢?否则编译器将如何区分您在参数列表中定义的
age
name
是类成员的
age
name
?哦,就是这样!以后我会使用不同的参数/变量名。@Ferrante对了一半,请使用成员初始化列表。@Ferrante这通常是个好主意。我喜欢使用与类变量相同的名称,但在名称后添加一个u以使其不同。因此,在本例中,我将执行
Person::Person(int-age,std::string-name_uu):name(name_u),age(age_u){}
@Ferrante,没问题。很高兴提供帮助。“这样,只要看一眼,就知道哪个变量是哪个。”嗯,我想我会一直忘记尾随的下划线是指“数据成员”还是“函数参数”.Oh,就是这样!以后我会使用不同的参数/变量名。@Ferrante对了一半,请使用一个成员初始化列表。@Ferrante这通常是个好主意。我喜欢使用与类变量相同的名称,但在名称后添加一个u以使其不同。因此在本例中,我会执行
Person::Person(int age,std::string name):name(name),age(age){}
@Ferrante没问题。很乐意帮忙。“这样,只要看一眼就知道哪个变量是哪个。”嗯,我想我会一直忘记尾随下划线是指“数据成员”还是“函数参数”。