#include <iostream>
using namespace std;
class MyClass {
int x;
public:
MyClass (int val) : x(val) {
cout << "constructed :" << this << endl;
}
int& get() {
cout << "x is : " << x << endl ;
return x;
}
};
int main() {
MyClass foo = {10};
foo.get() = 20;
foo.get();
foo = 30;
cout << &foo << endl;
foo.get();
}
je reçois la sortie suivante:Pourquoi cette fonction dans une classe initialise une valeur de membre avec cet appel étrange?
constructed :0x7fffc44ef920
x is : 10
x is : 20
constructed :0x7fffc44ef924
0x7fffc44ef920
x is : 30
Pourquoi cette foo.get() = 20
un moyen légitime de changer la valeur de « x » dans l'objet foo?
Aussi pourquoi est ce foo = 30
la construction d'un nouvel objet à l'adresse 0x7fffc44ef924
? Quel est ce type d'objet?
Pourquoi aussi: cout << &foo << endl;
imprime l'adresse de l'objet original MyClass fooo instancié au début de la fonction principale (à l'adresse 0x7fffc44ef920
)?
Comment référencez-vous le 'nouveau' foo à l'adresse 0x7fffc44ef924
?
essayez avec 'explicit' devant le constructeur à un paramètre - cela devrait vous apprendre beaucoup de choses. –
Sons comme vous pourriez utiliser un [bon livre C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – NathanOliver
une question par question s'il vous plaît – user463035818