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. パラメータとして*&との違いは何ですか?*

お時間をいただきありがとうございます。私はここにたくさんあることを知っています。

4

1 に答える 1

0
  1. まず、私は正しい軌道に乗っていますか?

    一般的なことを少し説明します。詳細に進みましょう。しかし、少なくとも、必要なコメントを提供していません。

  2. たとえば、関数に (char * a) を使用する場合、これは a のアドレスを渡すことですよね?

    いいえ。 というアドレスを渡しますa

    それでは *artist=a; のアドレスが指すものを変更しますか?

    これにより、型の不一致が生じます。artistへのポインタcharです。*artistを指すchar変数です。 agian は へのポインタです。したがって、変数へのポインターを割り当てます => 型の不一致。artistacharchar

  3. また、void が予想される場合、関数は bool です。なんで?

    なぜあなたが期待するのか私にはわかりませんvoid。ただし、bool理にかなっています。これにより、関数は、操作 (副作用あり) が成功したかどうかを報告できます。

  4. すべての set_xxx 関数のパラメータは*... ですが、set_record_label のパラメータは *& です。それは私には間違いのようです。そうですか?

    インストラクターはさまざまなパラメーターの使用を強調しているため、おそらく間違いではありません。しかし、実生活ではそれは悪いスタイルになります。

  5. パラメータとしての *& と * の違いは何ですか?

    *ポインター、&参照を記述します。参照される値は、再びポインターにすることができます。教科書の型に関するセクションを読み直すことをお勧めします。

于 2013-01-30T07:34:27.183 に答える