C++中一个特殊的Person类
a special Person class in C++
我是C++的新手,因为我在大学学习它,我遇到了一个问题。我有一个项目要做,应该很容易做,但我似乎遇到了一些困难。我必须实现一个Person类,它只有3个参数:name、firstnames(这是我的大问题,因为在一个char*数组中可以放几个名字,所以它将是一个char**)和age。我的老师给了我一个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;
}
我花了好几个小时思考解决方案,我在谷歌上搜索了很多(所以我做了功课),只是我不知道如何实现正确的解决方案。
一些注意事项:
- 一个名字可以看作一个元素的数组,因此您仍然可以使用数组在内部存储名字列表,当只有一个名字时,让它的大小为1
- 在构造函数中,您正在为构造函数的调用程序中堆栈上分配的指针赋值,虽然这不会在特定的snipped中产生问题,但这不是正确的方法:您应该为person的每个值创建自己的副本,这样一旦参数丢失,它们就不会丢失,并在
Personne
析构函数~Personne()
中管理它们的销毁 - 我不知道你是否被允许使用STL库,在这种情况下,考虑使用
string
存储名称和vector<string>
名称列表,他们会为你做大部分脏活
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '