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 : 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;
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 : 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);
};
//---------------------------------------------------------------------------
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
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 ?