0

下面的代码是一个类的构造函数,这个类有一个成员

int               ** busyhours      ;

构造函数

Instructor::Instructor ( int id , string name )
{
  this->id   = id   ;
  this->name = name ;

  // initialize busyhours
  this->busyhours = new int * [DAYS_WORKING] ;
  for ( int i = 0 ; i < DAYS_WORKING ; i++ )
  {
       busyhours[i] = new int[HOURS_PER_DAY] ;
       for ( int j = 0 ; j < HOURS_PER_DAY ; j++ )
        busyhours[i][j] = 0 ;
  }
}

busyhour 成员首先与此指针一起使用,但随后在没有此指针的情况下使用。我不明白为什么。感谢您的回答。

4

3 回答 3

5

this是隐式的,仅当参数与成员变量同名时才需要

于 2012-10-19T17:47:41.633 回答
2

快速阅读这篇文章,它应该清楚一些事情。

一般来说,我发现使用this->is c++ 更多的是个人喜好问题,但在某些情况下,您可以使用它来消除函数参数和成员变量之间的歧义。在您的示例中,我没有看到任何特殊原因为什么this->使用一次,然后再使用。这可能是因为this->.在 Visual Studio 中为您提供了 intelisense 弹出窗口,这可能只是第一次需要提醒作者成员变量的名称。

于 2012-10-19T17:57:32.810 回答
1

@WhozCraig 的想法大致正确,至少在我看来——但请注意,在这种情况下,您不需要重命名参数。您还可以使用带有 的值初始化new来消除显式归零数据,只留下:

Instructor::Instructor ( int id , string name )
   : id(id), name(name), busyhours(new int *[DAYS_WORKING])
{
  for (int i = 0; i < DAYS_WORKING; i++)
       busyhours[i] = new int[HOURS_PER_DAY]();
}

当然,您几乎肯定应该将所有这些都扔掉,并使用std::vector而不是自己进行动态分配。

于 2012-10-19T18:03:49.840 回答