2010-11-19 21 views
1

Je souhaite que l'utilisateur de mon programme de création d'enregistrements puisse créer ses propres enregistrements. Quelle est la meilleure façon d'y remédier?permet à l'utilisateur de créer ses propres instances d'une classe

Puis-je utiliser un tableau ou un vecteur pour le nom de la variable?

int RecU[100]; 

class Record 
    {...}; 

int main() 
    { 
    Record RecU[1]; 
    } 

Je l'ai essayé, et mon programme plante, donc je ne sais pas si c'est possible.

+0

Vous devez initialiser chaque enregistrement dans le tableau avant de pouvoir l'utiliser: Record [0] = new Record(); var firstRecord = RecU.First(); – Holystream

+0

@Holystream: Ce ne sont pas des pointeurs. – casablanca

+3

Que voulez-vous dire "s'écraser" en particulier? Est-ce le code que vous utilisiez? Que voulez-vous dire exactement par "utilisateur" ou "créer ses propres enregistrements"? –

Répondre

1

Si vous voulez que le code client puisse instancier Record à volonté, tout ce que vous avez à faire est de vous assurer qu'au moins un constructeur est disponible (ou une méthode d'usine). Normalement c'est le cas. Si vous déclarez votre classe comme ceci:

class Record 
{ 
}; 

... rien n'empêche le code client de l'instancier. Ils peuvent simplement faire ceci:

int main() 
{ 
    Record my_record; 
} 

Dans votre OP, il semblait que vous essayez de créer un tableau de 100 Record s. Vous faites comme ceci:

class Record 
{ 
}; 

static const unsigned num_records = 100; 

Record the_records[num_records]; 

int main() 
{ 
    for(unsigned i = 0; i < num_records; ++i) 
    Record& that_record = the_records[i]; // 'that_record' is a ref to one of the records 
} 
+1

Mieux encore, vous créez un 'std :: vector '. –

+0

@David, oui j'allais le mentionner, mais j'ai oublié pendant que je tapais! –

1

Un problème est que vous avez deux définitions de RecU, qui n'a rien à voir avec l'autre. Il y a le global, et il y a celui défini dans main(), qui cache le global.

+0

Je ne peux pas croire que je n'ai pas vu cela, je continue à oublier que les classes sont des types de données, alors comment le feriez-vous? – TimothyTech