Comment cloner un objet en C++ ? Ou Est-il une autre solution?
J'ai écrit une Pile et File d'attente de mise en œuvre (Liste Liée base). Il y a une pile (bigStack
). Par exemple, j'ai séparé bigStack
(exemple: stackA
et stackB
). Je pop()
un nœud de bigStack
, je push()
dans stackA
. De la même manière, je push()
dans stackB
. Je veux bigStack
de ne pas changer. Donc je veux cloner le bigStack
objet. Comment puis-je cloner les objets en C++? Ou est-il une autre solution à mon problème?
class Stack : public List {
public:
Stack() {}
Stack(const Stack& rhs) {}
Stack& operator=(const Stack& rhs) {};
~Stack() {}
int Top() {
if (head == NULL) {
cout << "Error: The stack is empty." << endl;
return -1;
} else {
return head->nosu;
}
}
void Push(int nosu, string adi, string soyadi, string bolumu) {
InsertNode(0, nosu, adi, soyadi, bolumu);
}
int Pop() {
if (head == NULL) {
cout << "Error: The stack is empty." << endl;
return -1;
} else {
int val = head->nosu;
DeleteNode(val);
return val;
}
}
void DisplayStack(void);
};
alors...
Stack copyStack = veriYapilariDersi;
copyStack.DisplayStack();
- Vous venez de le copier, qui est intégré dans la langue. - Je prendre, vous êtes toujours juste l'apprentissage de C++? (Aussi, le C et le C++ sont des langages différents)
- Mettre en œuvre un constructeur de copie pour la Pile, c'est à dire de la Pile(Pile const&).
Vous devez vous connecter pour publier un commentaire.
La solution classique à ce problème est d'écrire votre propre fonction pour cloner un objet. Si vous êtes en mesure de fournir une copie des constructeurs et de la copie de travail des opérateurs, cela peut être autant que vous devez aller.
Parfois, il est utile de formuler explicitement
clone()
méthode, en particulier pour les classes polymorphes.EDIT: Depuis
Stack
a pas de variables de membre, il n'y a rien à faire dans le constructeur de copie ou copie opérateur d'affectation pour initialiserStack
's les membres de la soi-disant "droite" (rhs
). Cependant, vous devez toujours vous assurer que toutes les classes de base sont l'occasion pour initialiser leur membres.Ce faire, vous devez appeler la classe de base:
Stack
n'ai pas vraiment de variables de membre?Si votre objet n'est pas polymorphe (et une pile de mise en œuvre n'est probablement pas le cas), alors que pour d'autres réponses ici, ce que vous voulez, c'est le constructeur de copie. Veuillez noter qu'il existe des différences entre la copie de la construction et de l'affectation en C++, si vous voulez les deux comportements (et par défaut les versions ne correspondent pas à vos besoins), vous aurez à mettre en œuvre les deux fonctions.
Si votre objet est polymorphe, puis découpage peut être un problème et vous devez sauter à travers quelques cerceaux extra pour faire une copie. Parfois, les gens utilisent comme méthode virtuelle appelé clone() comme une aide pour polymorphe de la copie.
Enfin, notez que l'obtention de la copie et de l'affectation en droit, si vous devez remplacer la valeur par défaut des versions, est en fait très difficile. Il est généralement préférable de configurer vos objets (via RAII), de telle sorte que la valeur par défaut des versions de copier/affecter à faire ce que vous voulez qu'ils fassent. Je vous recommande vivement de regarder Meyer Effective C++, en particulier sur les éléments 10,11,12.
En C++ de la copie de l'objet signifie le clonage. Il n'y a aucune spécial clonage là.
Comme la norme suggère, après la copie, vous devriez avoir 2 copies identiques d'un même objet.
Il y a 2 types de copie: constructeur de copie lorsque vous créez un objet non initialisé de l'espace et de la copie de l'opérateur où vous devez libérer l'ancien état de l'objet avant de le fixer de nouvelles de l'état.
List
est. L'info incomplète. En général, vous devez copier votre objet, appelle la même méthode dans votre classe de base. Élément de votre pile doit également copiable.