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 =
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 TMaClasse MaClasse1; TMaClasse MaClasse2; MaClasse1.X = 1; MaClasse1.Y = 2; MaClasse2 = MaClasse1;
le .h
le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }; //---------------------------------------------------------------------------
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Partager