Question

class A {
public:
void operator=(const B &in);
private:
 int a;
};

class B {
private:
 int c;

}

désolé. il est arrivé une erreur. est opérateur d'affectation valide? ou est-il un moyen d'y parvenir? [Il n'y a pas de relation entre A et classe B.]

void A::operator=(const B& in) 
{ 
a = in.c;

} 

Merci beaucoup.

Était-ce utile?

La solution

Oui, vous pouvez le faire.

#include <iostream>
using namespace std;

class B {
  public:
    B() : y(1) {}
    int getY() const { return y; }
  private:
     int y;
};


class A {
  public:
    A() : x(0) {}
    void operator=(const B &in) {
       x = in.getY();
    }
    void display() { cout << x << endl; }
  private:
     int x;
};


int main() {
   A a;
   B b;
   a = b;
   a.display();
}

Autres conseils

Ce n'est pas une réponse, mais il faut être conscient que l'idiome typique de l'opérateur d'affectation est d'avoir le retourner une référence au type d'objet (plutôt que vide) et de revenir (* cela) à la fin. De cette façon, vous pouvez enchaîner les assignent, comme dans a = b = c:

A& operator=(const A& other) 
{
    // manage any deep copy issues here
    return *this;
}

Les deux opérateur d'affectation et les constructeurs paramétrés peuvent avoir des paramètres de tout type et utiliser les valeurs de ces paramètres comme ils veulent initialiser l'objet.

D'autres ont clued sur ce point, mais je vais dire réellement. Oui, vous pouvez utiliser différents types, mais notez que si vous utilisez ami, votre classe ne peut pas accéder aux membres privés de la classe, il est en cours passé avec l'opérateur.

Signification A ne serait pas en mesure d'accéder B :: c parce qu'il est privé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top