1

私は大学で C++ を学んでいるので C++ の初心者で、問題があります。かなり簡単に実行できるはずのプロジェクトがありますが、いくつかの問題が発生しているようです。名前、名 (char* の配列に複数の名前を入れることができるため、char** になる可能性があるため、これは私の大きな問題です) と年齢の 3 つの引数を使用して、Person クラスを実装する必要があります。私の先生は、私の Person クラスを使用していくつかのタイプの Person を作成する testPerson.cc ファイルをくれました。私の問題は、コンストラクターを作成するときです。これは、いくつかのケースを管理する必要があるためです。たとえば、人の名が 1 つしかない場合などです。

  const Personne lea ("Tralala", "Lea", 45);

または、人には複数のファーストネームがあります:

  const char* prenoms1[] = {"Marcel", "Firmin", "Gaston", 0};
  const Personne marcel ("Meharcele",  prenoms1, 78);

name(char*)、firstname(char**)、age(int) の 3 つの属性が必要であることは確かです。

これは、先生が私にくれたファイルのスニペットです (Person クラスを作成するときに尊重する必要があります)。

int main () {
  cout << "We create the next persons:\n";

  // version of constructor with several names:
  const char* prenoms1[] = {"Marcel", "Firmin", "Gaston", 0};
  const Personne marcel ("Meharcele",  prenoms1, 78);

  // version of constructor with only one name:
  const Personne lea ("Tralala", "Lea", 45);

ご覧のとおり、fname が 1 つだけの場合、または複数の fname がある場合には、いくつかのコンストラクターが必要です。これが私のクラスです。

#include "personne.h"

Personne::Personne(const char* name, const char** fnames, int a) {
    nom = name;
    prenom = fnames;
    age = a;

}
Personne::Personne(const char* name, const char* fname, int a) {
    nom = name;
    prenom = fname; //here I have a problem, since the attribute prenom is of type char**
    age = a;

}

void Personne::setAge(int& a) {
  age = a;
}

void Personne::setNom(const char* name) {
  nom = name;
}

void Personne::setPrenoms(const char** fnames) {

}

int Personne::getAge() const {
  return age;
}

char* Personne::getNom() const {
  return nom;
}

char** Personne::getPrenoms() const {
  return prenom;
}

私は解決策について何時間もかけて考え、たくさんグーグルで検索しました(宿題をしたので)、正しい解決策を実装する方法がわからないだけです。

4

1 に答える 1

7

いくつかの考慮事項:

  • 1 つの名前は 1 つの要素の配列と見なすことができるため、配列を使用して名前のリストを内部に格納し、名前が 1 つしかない場合はサイズを 1 にすることができます。
  • コンストラクターでは、コンストラクターの呼び出し元のスタックに割り当てられるポインターを割り当てていますが、これは特定の切り取りで問題を引き起こしませんが、それを行う正しい方法ではありません:それぞれの独自のコピーを作成する必要がありますパラメーターが失われ、Personneデストラクタで破棄を管理すると失われないように、人の値~Personne()
  • STL ライブラリの使用が許可されているかどうかはわかりません。その場合は、string名前と名前のリストを保存するために使用することを検討してvector<string>ください。それらは、ほとんどの汚い作業を行ってくれます。
于 2012-11-29T22:29:22.630 に答える