Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/02/2007, à 00:19

Stephanie

[C++]Utilisation de vector

Bonsoir,

je débute en C++.
J'ai 3 classes A, B et C.
B et C hérite de A.
Je fais vector<A>listes(100);
Je voudrais savoir s'il est possible de faire ceci :
for(int i=0; i<50; i++)
listes[i] = new B();
for(int j=51; j<100; j++)
listes[j] = new C();

Merci

Hors ligne

#2 Le 25/02/2007, à 00:32

jobherzt

Re : [C++]Utilisation de vector

normalement oui, c'est l'interet de l'heritage.

Hors ligne

#3 Le 25/02/2007, à 00:38

Stephanie

Re : [C++]Utilisation de vector

jobherzt a écrit :

normalement oui, c'est l'interet de l'heritage.

Merci.
J'ai une autre question
Désolé si mes questions paraissent bête mais je débute dans ce langage.
Si j'ai une classe A et une classe B qui ne sont pas liées par héritage.
Comment faire pour que ce cas de figure soit possible :
class A{
int nb;
...
}

class B{
int fct(){
...
nb++;
}
}

C'est à dire comment faire pour que nb puisse être incrémenté dans la classe B alors que l'attribut est défini dans la classe A.

Merci

Hors ligne

#4 Le 25/02/2007, à 00:50

Link31

Re : [C++]Utilisation de vector

Il faut déclarer nb comme public dans la déclaration de A :

class A{
public:
    int nb;
    ...
protected:
    ...
private:
    ...
}

Si elle est privée, seules les méthodes de la classe A y auront accès, et si elle est protégée, seules les méthodes de A et celles des classes qui héritent de A y auront accès.

Hors ligne

#5 Le 25/02/2007, à 00:50

jobherzt

Re : [C++]Utilisation de vector

ca n'a pas de sens de faire ca. une classe est un type, cad que tu peux declarer des objets de type, donc pour que ton truc marche il faut que lorsque tu cree un objet de type B, il sache pour quel objet il doit incrementer la variable nb.. en gros, tu ne peux pas par quelque moyen que ce soit, modifier une variable d'une classe, tu peux seulement modifier une variable d'une instance de cette classe. donc a la limite, tu peux faire :

class B
{
  protected:
  A unObjetA;
  public:
  fct(){ unObjetA.nb++; }
}

mais dans ce cas il faut que tu declare la classe B comme [b]amie/b] de la classe A.

Hors ligne

#6 Le 25/02/2007, à 00:56

Link31

Re : [C++]Utilisation de vector

À mon avis, c'était bien le sens de sa question (c-à-d modifier la variable nb d'une instance de A).

Hors ligne

#7 Le 25/02/2007, à 01:04

jobherzt

Re : [C++]Utilisation de vector

c'est pas sur, c'est une erreur que j'ai souvent vu..

au passage, c'est plus "correct" de passer par le mot clé friend que de declarer une variable en public.. si une variable est declarée en public, ca n'est pas seulement la classe B qui pourra y acceder, mais n'importe qui d'autre, et la prudence impose de limiter ce genre de chose !

Hors ligne

#8 Le 25/02/2007, à 01:14

jobherzt

Re : [C++]Utilisation de vector

euh.. tu te contreids, la, tu parles d'incrmenter nb dans vacancier, puis dans g1 ou g2 qui snt des glaciers, et pourquoi passe tu 2 glaciers en parametre de achat glace ?? du coup je reste avec des A et des B smile la maniere de faire la plus propre est :

dans la classe A tu ajoute une methode :

void nbPlus() { nb++; }

puis dans la classe B, ta methode sera :

void maMathode(A& monObjet)
{
  monObjet.nbPlus();
}

d'une maniere generale, il est bon que l'acces a une propriete d'une classe se fasse via des methodes et pas directement, meme si ca peut etre un peu lourd..

Hors ligne

#9 Le 25/02/2007, à 01:20

Stephanie

Re : [C++]Utilisation de vector

jobherzt a écrit :

euh.. tu te contreids, la, tu parles d'incrmenter nb dans vacancier, puis dans g1 ou g2 qui snt des glaciers, et pourquoi passe tu 2 glaciers en parametre de achat glace ?? du coup je reste avec des A et des B smile la maniere de faire la plus propre est :

dans la classe A tu ajoute une methode :

void nbPlus() { nb++; }

puis dans la classe B, ta methode sera :

void maMathode(A& monObjet)
{
  monObjet.nbPlus();
}

d'une maniere generale, il est bon que l'acces a une propriete d'une classe se fasse via des methodes et pas directement, meme si ca peut etre un peu lourd..

L'attribut nb s'initialise ou ?
Car j'ai cru comprendre qu'on ne peut pas faire initialiser un attribut directement
class A{
int nb = 0;//incorrect
}

Hors ligne

#10 Le 25/02/2007, à 01:22

jobherzt

Re : [C++]Utilisation de vector

dans le constructeur de ta classe A :

class A
{
  protected:
    int nb;
  public:
    A(){ nb=0; }
}

Hors ligne

#11 Le 25/02/2007, à 01:24

Stephanie

Re : [C++]Utilisation de vector

Ok merci pour toutes ces précisions

Dernière modification par Stephanie (Le 25/02/2007, à 01:25)

Hors ligne