具有指针参数的类成员函数

时间:2013-01-30 03:12:14

标签: class pointers parameters reference memory-address

我有这个家庭作业,现在给我带来很多麻烦。我的老师在课堂上很模糊,很难与之沟通。我会非常努力地在这里表达我的想法。 这是作业:

  

(3pts)给定以下类头文件,编写类的源代码   列出的每个访问器和增变器函数的代码。 (工资   注意功能如何列出他们的参数,各不相同   在通过引用和价值传递之间。)不要忘记评论   你的代码 - 它很重要!

class Album {
  private:
      char * artist;  // band or singer’s name
      char * title;   // title of the album
      int year_released;  // year the album is released
      char * record_label;    // name of company produced album
      int num_songs;  // number of songs on the album
      int num_minutes_long;   // length (mins) of album
      char * genre;   // genre of artist (eg, rock, pop, …)
  public:
      //constructors
      Album();
      Album(char *& a, char *& t);

      //deconstructor
      ~Album();

      //accessors and mutators
      bool set_artist(char * a);
      bool set_title(char * t);
      bool set_year_released(int value);
      bool set_record_label(char *& label);
      bool set_num_songs(int value);
      bool set_num_minutes_long(int value);
      bool set_genre(char * g);
      bool get_artist(char *& a);
      bool get_title(char *& t);
      int get_year_released();
      bool get_record_label(char *& label);
      int get_num_songs();
      int get_num_minutes_long();
      bool get_genre(char *& g);
};

到目前为止,这是我的工作:

bool Album::set_artist(char * a)
{
 *artist = a;
}

bool Album::set_title(char * t)
{
*title =  t;
}

bool Album::set_year_released(int value)
{
year_released = value;
}   

bool Album::set_record_label (char *& label)
{
*record_label = label;
}

bool Album::set_num_songs(int value)
{
num_songs = value;
}
bool Album::set_number_minutes_long(int value)
{
num_minutes_long = value;
}
bool Album::set_genre(char * g)
{
*genre = g;
}
bool Album::get_artist(char *& a)
{
return artist;
}
bool Album::get_title(char *& t)
{
return title;
}
int Album::get_year_released()
{
return year_released;
}

bool Album::get_record_label(char *& label)
{
return *record_label;
}

输入将是一个数组。

我的问题:

  1. 首先,我是在正确的轨道上吗?

  2. 例如,对函数使用(char * a)时,这是传递a的地址,对吗?那么*artist=a;会更改a的地址指向的内容吗?

  3. 此外,当我期望无效时,功能是bool。为什么呢?

  4. 对于所有set_xxx函数,参数为* ...但对于set_record_label,它为*&。这对我来说似乎是个错误。是吗?

  5. *&*之间的区别是什么?

  6. 感谢您的时间。我知道这里有很多。

1 个答案:

答案 0 :(得分:0)

  1. 首先,我是否走在正确的轨道上?

    有点笼统,让我们详细介绍一下。但至少,你没有提供所需的评论。

  2. 当使用(char * a)函数时,例如,这是传递a的地址,正确吗?

    没有。它传递一个名为a的地址。

    所以* artist = a;改变点的地址是什么?

    这会产生类型不匹配。 artist是指向char的指针。 *artist变量为char变量artista是agian,指向char的指针。因此,您指定一个指向char变量=>的指针类型不匹配。

  3. 此外,当我期望无效时,这些功能是bool。为什么?

    我不知道你为什么期待void。但是,bool是有道理的:它允许函数报告操作(带副作用!)是否成功。

  4. 对于所有set_xxx函数,参数为* ...但是对于 set_record_label它是*&。这对我来说似乎是个错误。是 那对吗?

    由于您的教练强调使用不同的参数,因此可能没有错误。然而,在现实生活中,这将是一种糟糕的风格。

  5. *&和*之间有什么区别?和*作为参数?

    *描述了一个指针,&一个引用。引用的值可以是指针。我建议您重新阅读教科书中关于类型的部分。