1

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

(3 分)给定以下类头文件,为列出的每个访问器和修改器函数编写类的源代码。(注意函数如何列出它们的参数,在按引用传递和按值传递之间变化。)不要忘记注释您的代码 - 它很重要!

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. 此外,当我期望 void 时,这些函数是 bool 的。为什么?

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

  5. *&*as 参数有什么区别?

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

4

1 回答 1

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

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

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

    不,它传递一个名为 的地址a

    那么*艺术家=a; 改变 a 的地址指向什么?

    这会产生类型不匹配。artist是指向 的指针char*artistchar变量artist指向。a 是,agian,指向char. 因此,您将指针分配给char变量 => 类型不匹配。

  3. 此外,当我期望 void 时,这些函数是 bool 的。为什么?

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

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

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

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

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

于 2013-01-30T07:34:27.183 回答