[Pb de débutant, et encore] surcharge operator =
Je suis confronté à un problème qui me laisse perplexe: J'ai une classe MaClasse que je peux évidemment copier très classiquement avec un =
Code:
1 2 3 4 5 6 7
| TMaClasse MaClasse1;
TMaClasse MaClasse2;
MaClasse1.X = 1;
MaClasse1.Y = 2;
MaClasse2 = MaClasse1; |
J'ai surchargé l'opérateur = pour pouvoir l'initialiser avec une structure. Pour moi, le prototype étant différent, ça devrait juste être une méthode polymorphe et ne pas affecter l'opérateur = par défaut:
le .h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| //---------------------------------------------------------------------------
typedef struct
{
short x;
short y;
} MASTRUCTURE;
//---------------------------------------------------------------------------
class TMaClasse
{
private:
int FX;
int FY;
public:
__fastcall TMaClasse(void);
__property int X = {read = FX, write = FX};
__property int Y = {read = FY, write = FY};
const TMaClasse &operator = (const MASTRUCTURE &MaStructure);
};
//--------------------------------------------------------------------------- |
le .cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| //---------------------------------------------------------------------------
__fastcall TMaClasse::TMaClasse()
{
FX = 0;
FY = 0;
}
//---------------------------------------------------------------------------
const TMaClasse &TMaClasse::operator = (const MASTRUCTURE &MaStructure)
{
FX = MaStructure.x;
FY = MaStructure.y;
return *this;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMaClasse MaClasse1;
TMaClasse MaClasse2;
MaClasse1.X = 1;
MaClasse1.Y = 2;
MaClasse2 = MaClasse1; // <- Erreur
MASTRUCTURE MaStructure;
MaStructure.x = 3;
MaStructure.y = 4;
MaClasse2 = MaStructure;
} |
Dans ce cas, j'ai une erreur E2328 les classes avec des propriétés ne peuvent pas être copiées par valeur que je ne comprends pas. Faut-il dans ce cas que je redéfinisse aussi l'opérateur = par défaut ? Pourquoi le fait de redéfinir le = avec un prototype différent affecte le = par défaut ?