C++中一个特殊的Person类

And*_*ncu 1 c++ arrays class

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

  const Personne lea ("Tralala", "Lea", 45);
Run Code Online (Sandbox Code Playgroud)

或者一个人有几个名字:

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

我肯定知道我必须有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);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我需要几个构造函数来处理只有1个fname或几个fnames的情况.这里是我的类:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我花了几个小时思考一个解决方案,我搜索了很多(所以我做了我的功课),这只是我不知道如何实施正确的解决方案.

Jac*_*ack 7

一些考虑:

  • 单个名字可以看作是一个元素的数组,因此您仍然可以使用数组在内部存储名字列表,并且当只有一个名称时,让它的大小为1.
  • 在你的构造函数中,你正在分配在构造函数的调用者堆栈中分配的指针,虽然这不会在你的特定剪切中产生问题,但这不是正确的方法:你应该创建自己的副本这个人的价值,一旦参数丢失,他们不会迷路,并在析构函数中管理他们的Personne破坏~Personne()
  • 我不知道你是否被允许使用STL库,在这种情况下考虑使用string存储名称和名称vector<string>列表,他们将为你做大部分的脏工作

  • +1用于推荐使用字符串和向量<string>.C++的大部分坏名声来自强迫/鼓励使用原始数组和初学者指针,使用字符串,向量等可以帮助他们更多地考虑解决问题. (2认同)