La réponse est une fonctionnalité de langage merveilleux appelé affectation. En résumé, vous pouvez modifier la valeur d'une variable – même une variable d'un type que vous avez vous-même défini – en utilisant le symbole =
.
En fait votre code est en utilisant déjà l'affectation, à savoir dans le constructeur.Dans l'exemple ci-dessous, j'ai remplacé l'affectation de ce code original par un initialiseur, car les initialiseurs sont généralement préférables (choisissez-les lorsqu'il n'y a pas de bonnes raisons d'utiliser l'affectation pour l'initialisation des membres).
L'affectation qui met à jour la valeur de t1
, efficace "réutilisation" t1
, peut se présenter comme suit:
class Table
{
private:
int feet;
public:
Table(int x): feet(x) {}
};
Table t1(3);
t1 = Table(4);
Note 1: il est possible de définir un type de telle sorte que la cession est interdite.
Note 2: puisque vous avez défini un constructeur de conversion , qui accepte un seul argument, et puisque ce constructeur n'est pas explicit
, l'affectation peut être exprimé plus simplement ci-dessus (mais peut-être moins clairement) que & hellip ;
t1 = 4;
& hellip; ce qui entraîne exactement la même chose.
Note 3: votre code tel que présenté ne l'aurait pas compilé, c'était juste "comme" C++, ce n'était pas C++. J'ai corrigé les erreurs (je pense, mais je n'ai pas pris la peine de passer par un compilateur). Mais en général, il n'est pas toujours possible de savoir ou même de deviner si des erreurs dans le code présenté ont quelque chose à voir avec la question, alors s'il vous plaît copiez et collez du code réel.
Vive & HTH.,
J'aime cette réponse. :) +1 de moi. –
Wow.Ça a vraiment marché. Merci! – Kaimde
Je vais sortir d'un membre et deviner que le code réel est beaucoup plus compliqué que l'extrait montré, auquel cas l'opérateur d'assignation fourni par le compilateur peut ne pas être adéquat, et un opérateur d'assignation défini par l'utilisateur peut finir dupliquer une grande partie du code du destructeur de tables et du constructeur. C'est là que le swap serait utile, pour éliminer cette duplication de code, et fournir une sécurité d'exception. –