#include <iostream>
class Bar
{
protected:
public:
int & x;
Bar(int & new_x)
:x(new_x)
{}
Bar & operator = (const Bar toCopy)
{
x = toCopy.x;
return *this;
}
};
int main()
{
int x1(1);
int x2(2);
Bar bar = Bar(x1);
std::cout << bar.x << std::endl;
bar = Bar(x2);
std::cout << bar.x << std::endl;
bar.x = 5;
std::cout << bar.x << std::endl;
std::cout << x1 << std::endl;
std::cout << x2 << std::endl;
}
La sortie est:écrit `` = opérateur de référence pour les membres non-statique classe
1
2
5
5
2
Ce que je suis en train de faire est copiex
et enregistrez dans l'objet bar
.
La sortie me suggère que l'opérateur d'affectation n'a pas fait sa magie, à la fois en termes de en copiant et en prenant la valeur du nouvel objet. J'ai suivi this link.
La modification de x
en une valeur plutôt qu'une référence n'est pas possible, car dans le vrai programme x
est une classe abstraite.
S'il vous plaît, si possible, s'abstenir d'utiliser l'affectation de tas.
EDIT: 1. J'ai réalisé que je viens d'abattre le langage C++. Je voudrais m'excuser auprès de tous les ordinateurs parlant "C++ ian". Ma motivation était d'assigner une variable abstraite membre sur la pile. Autant que je comprends, il ne peut pas être fait sur la pile, parce que la taille de la classe dérivée n'est pas connue à la compilation. 2. OK ... Je suis un total n00b ... (non sh * t, Sherlock!). "Programmation C++ efficace" @rhalbersma est un must have. Il contient des éléments essentiels, mais vous ne les trouverez nulle part (copier des constructions, initialiser la copie), .. en un seul endroit de toute façon.
données de référence publiques, en passant des arguments par référence non const ou valeur const: vous pouvez commencer à lire Effective C++ ou similaire pour obtenir vos membres de classe de base à droite. – TemplateRex
Je n'utilise jamais de références en tant que membres, j'utilise plutôt des pointeurs, vous pouvez tout faire (initialiser le pointeur avec & new_x par exemple) et plus encore. Certaines personnes aiment les références en tant que membres en raison de leur limitation ... –