2012-11-29 52 views
1

我是C++的新手,因爲我在大學學習它,並且遇到了問題。我有一個項目要做,應該相當容易,但我似乎遇到了一些困難。我必須實現一個Person類,它有三個參數:name,firstnames(這是我的BIG問題,因爲可以有多個名稱放在char *數組中,所以它將是char **)和年齡。我的老師給了我一個testPerson.cc文件,它使用我的Person類創建幾種類型的人員。我的問題是,當我創建的構造(S),因爲我必須管理幾種情況:例如,如果一個人只有一個名字,例如:C++中的特殊Person類

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

或一個人有幾個firstnames:

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

我知道我必須確切地擁有3個屬性:name(char *),firstname(char **),age(int)。

下面是老師給我的文件(創建我一個人上課的時候,我必須尊重)一個片斷:

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或幾個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; 
} 

我花了幾個小時想一個解決方案,我用Google搜索了很多(所以我做功課),它只是我不知道如何實現正確的解決方案。

+1

如果你可以使用STL,這將使得使用STL 'std :: vector ' – peacemaker

回答

7

一些注意事項:

  • 一個名字可以被看作是一種元素的數組,所以你仍然可以使用數組內部存儲第一名稱的列表,並讓它成爲大小爲1的時候只有一個。
  • 在你的構造函數中,你分配的指針是在你的構造函數的調用者的堆棧中分配的,而這並不會在你的特定剪裁中產生問題,它不是正確的方法:你應該創建自己的每個人的價值的副本,使他們不會迷路,一旦參數丟失,並管理他們的銷燬在Personne析構函數~Personne()
  • 我不知道你是否被允許使用STL庫,在這種情況下考慮使用string來存儲名稱和vector<string>名稱列表,他們會爲你做大部分髒東西
+2

+1推薦使用字符串和向量。 C++的壞名聲大部分來自強制/鼓勵使用原始數組和指向初學者的指針,在這些初學者中,使用字符串,向量等將幫助他們更多地思考解決問題的方法。 –