1

我是 C++ 的新手,因为我正在大学学习它,但我遇到了一个问题。我有一个项目要做,应该很容易做,但我似乎遇到了一些困难。我必须实现一个 Person 类,它正好有 3 个参数:姓名、名字(这是我的大问题,因为可以在 char* 数组中放入多个姓名,所以它将是一个 char**)和年龄。我的老师给了我一个 testPerson.cc 文件,它使用我的 Person 类来创建几种类型的 Person。我的问题是当我创建构造函数时,因为我必须处理几种情况:例如,如果一个人只有一个名字,例如:

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

或者一个人有几个名字:

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

我确信我必须有 3 个属性:name(char*)、firstname(char**)、age(int)。

这是老师给我的文件中的一个片段(在创建我的 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);

如您所见,对于只有 1 个 fname 或多个 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。
  • 在您的构造函数中,您正在分配在构造函数的调用者中分配在堆栈上的指针,虽然这不会在您的特定剪辑中产生问题,但这不是正确的方法:您应该创建自己的每个副本人的价值,这样他们就不会在参数丢失后丢失并在析构函数中管理它们的Personne破坏~Personne()
  • 我不知道你是否被允许使用 STL 库,在这种情况下考虑使用string来存储名称和名称vector<string>列表,它们会为你做大部分的脏活
于 2012-11-29T22:29:22.630 回答