Probleme de passage d'argument

dr971 Messages postés 27 Statut Membre -  
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour , j'ai un petit prob (plutot un gros)

En fait j'ai une class A et une class B

classA
{
public :
void setResistance(int); //mutateur
int getResistance(); //accesseur
private:
int m_resistance;
};

classB
{
public :
void petitprog(int res)
{
res=res-2;
}
}

Dans mon main j'ai :
A elementa;
B elementb;

et je veux faire
elementb.petitprog(elementa.getResistance( ));

Mon probleme est ke je voudrais que la valeur de m_resistance change mais ce n'est pas le cas.
Pouvez vous m'aider?? merci d'avance
A voir également:

5 réponses

mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
Ben il faut soit que petit prog manipule un pointeur (*) ou une référence (&) sur le resistance que tu veux modifier (celui de l'objet a), car sinon tu manipules une recopie :
int & getResitance(){
  return m_resistance;
}

void petitprog(int & res){
  res -= 2;
} 

.. mais ça c'est pas terrible parce qu'un accesseur sert normalement à empêcher que l'objet accédé ne soit pas modifiable (sinon autant faire une structure). En gros ton accesseur devrait s'écrire en toute rigueur :
inline const int & getResistance() const{
  return m_resistance;
}

Moi je pense que la solution intelligente c'est d'écrire
void petitprog(A & a){
  int res = a.getResitance();
  a.setResistance(res - 2);
} 

et tu peux même garder tes accesseurs tels quels.

Bonne chance
0
dr971 Messages postés 27 Statut Membre
 
merci de votre aide
Mais j'avais oublié de préciser ke la classe Adérive de la classe B. ca change un truc?
0
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
Ah oui ca change que res est directement accessible par la classe fille si res est public ou protected et que l'héritage est public.
class B : public A {
  ...
}

Bonne chance
0
dr971 Messages postés 27 Statut Membre
 
et comment je peux faire alors stp??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
En fait dans ta classe fille tu vas pouvoir directement accéder au champ m_resistance, mais seulement si l'héritage est public et si ce champ est protected ou public.
#include <iostream>

class A{
    protected:
    int m_resistance;

    public:

    A(int res = 0) : m_resistance(res){}

    inline int get_resistance() const{
        return m_resistance;
    }
};

class B : public A {
    public:
    B(int res):A(res){}

    void petit_prog(){
        m_resistance -= 2;
    }
};

int main(){
    B b(69);
    std::cout << "b.res = " << b.get_resistance() << std::endl;
    b.petit_prog();
    std::cout << "b.res = " << b.get_resistance() << std::endl;
    return 0;
}

Ce qui donne :
b.res = 69
b.res = 67

Bonne chance
0