C++ Membre du groupe de Longueur Constante (Initialisation de l')
J'ai une classe qui contient un tableau. Je veux ce tableau à régler à la longueur d'une constante:
//Entities.h
class Entities
{
private:
const int maxLimit;
int objects[maxLimit];
int currentUsage;
public:
Entities();
bool addObject(int identifier);
void showStructure();
};
Le principal problème que je vais avoir est avec le constructeur. J'ai pensé:
//Entities.cpp
Entities::Entities() : maxLimit(50)
{
currentUsage = 0;
cout << "Entities constructed with max of 50" << endl;
}
aurait été suffisant...mais pas tellement. Je ne sais pas si je peux utiliser l'initialiser la liste pour tableau d'initialisation.
Comment puis-je procéder à l'initialisation objects
tableau à l'aide de la maxLimit
const? Je suis relativement nouveau pour les classes en C++, mais j'ai de l'expérience avec Java. Je suis principalement de tester de ce phénomène de "constness'.
- Méfiez-vous! Vous allez être une const accro à bientôt!
Vous devez vous connecter pour publier un commentaire.
Le tableau doit avoir une longueur constante. Je veux dire une longueur qui est la même pour tous les objets de cette classe. C'est parce que le compilateur doit connaître la taille de chaque objet, et elle doit être la même pour tous les objets de cette classe particulière. Donc, la suite allait le faire:
Et dans le fichier cpp:
Je préfère utiliser une énumération, parce que je n'aurai pas à définir la statique dans le fichier cpp alors:
Si vous voulez avoir une par objet de la taille de la matrice, vous pouvez utiliser un tableau dynamique.
vector
est un:Le mieux est de faire comme beaucoup d'initialisation dans la liste d'initialisation que possible.
Vous pouvez utiliser l'argument de modèle si vous avez besoin de définir la taille du tableau au moment de la compilation:
pour allouer dynamiquement de la mémoire vous pouvez avoir besoin d'utiliser le "nouveau" mot-clé comme
les objets sont définis comme:
à l'intérieur du constructeur, vous feriez:
edit:
oublié de mentionner, vous aurez besoin de libérer le tableau lorsque vous avez terminé, probablement dans le destructeur de la classe.
const int
s doivent être initialisées lors de la déclaration. Si vous ne connaissez pas la valeur qu'il a à être au moment de la déclaration, vous allez avoir à adopter une stratégie différente.Vous aurez besoin pour créer le tableau dans le constructeur, tout en gardant un pointeur à l'extérieur. Est-ce que vous voulez faire?
Dans votre classe :
Et à l'extérieur:
Si tous les objets ont la même longueur, alors la longueur peut être statique. Cela en fait une constante expression intégrale admis comme un tableau lié:
Rappelez-vous que sizeof(Entités) est une expression valide. Chacune des Entités de l'objet a la même taille.
Utiliser std::vector et vous obtenez le comportement attendu. Pas besoin de s'inquiéter sur les pointeurs, copies, etc