#include <iostream>
using namespace std;
class A {
public:
int value;
};
// A reference passed by value - reassign the value.
void myValFunction(A* value) {
A other;
other.value = 4;
value = &other;
}
// A reference passed by value - update its value.
void myUpdateValFunction(A* value) {
value->value = 5;
}
// Pass by reference - reassign the reference.
// You can't do this in JavaScript
void myRefFunction(A& ref) {
A other;
other.value = 6;
ref = other;
}
int main() {
// I'll create 3 A instances here (a#) and their references (r#)
// In JavaScript, we only really interact with the r# value.
A a1; A* r1 = &a1;
A a2; A* r2 = &a2;
A a3; A* r3 = &a3;
// Set some values through the reference.
r1->value = 1;
r2->value = 2;
r3->value = 3;
myValFunction(r1);
myUpdateValFunction(r2);
myRefFunction(a3);
std::cout << r1->value << std::endl;
std::cout << r2->value << std::endl;
std::cout << r3->value << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmNsYXNzIEEgewoJcHVibGljOgoJaW50IHZhbHVlOwp9OwoKCi8vIEEgcmVmZXJlbmNlIHBhc3NlZCBieSB2YWx1ZSAtIHJlYXNzaWduIHRoZSB2YWx1ZS4Kdm9pZCBteVZhbEZ1bmN0aW9uKEEqIHZhbHVlKSB7CglBIG90aGVyOwoJb3RoZXIudmFsdWUgPSA0OwoJdmFsdWUgPSAmb3RoZXI7Cn0KCi8vIEEgcmVmZXJlbmNlIHBhc3NlZCBieSB2YWx1ZSAtIHVwZGF0ZSBpdHMgdmFsdWUuCnZvaWQgbXlVcGRhdGVWYWxGdW5jdGlvbihBKiB2YWx1ZSkgewoJdmFsdWUtPnZhbHVlID0gNTsKfQoKLy8gUGFzcyBieSByZWZlcmVuY2UgLSByZWFzc2lnbiB0aGUgcmVmZXJlbmNlLgovLyBZb3UgY2FuJ3QgZG8gdGhpcyBpbiBKYXZhU2NyaXB0CnZvaWQgbXlSZWZGdW5jdGlvbihBJiByZWYpIHsKCUEgb3RoZXI7CglvdGhlci52YWx1ZSA9IDY7CglyZWYgPSBvdGhlcjsKfQoKaW50IG1haW4oKSB7CgkvLyBJJ2xsIGNyZWF0ZSAzIEEgaW5zdGFuY2VzIGhlcmUgKGEjKSBhbmQgdGhlaXIgcmVmZXJlbmNlcyAociMpCgkvLyBJbiBKYXZhU2NyaXB0LCB3ZSBvbmx5IHJlYWxseSBpbnRlcmFjdCB3aXRoIHRoZSByIyB2YWx1ZS4KCUEgYTE7IEEqIHIxID0gJmExOwoJQSBhMjsgQSogcjIgPSAmYTI7CglBIGEzOyBBKiByMyA9ICZhMzsKCQoJLy8gU2V0IHNvbWUgdmFsdWVzIHRocm91Z2ggdGhlIHJlZmVyZW5jZS4KCXIxLT52YWx1ZSA9IDE7CglyMi0+dmFsdWUgPSAyOwoJcjMtPnZhbHVlID0gMzsKCQoJCglteVZhbEZ1bmN0aW9uKHIxKTsKCW15VXBkYXRlVmFsRnVuY3Rpb24ocjIpOwoJCglteVJlZkZ1bmN0aW9uKGEzKTsKCQoJc3RkOjpjb3V0IDw8IHIxLT52YWx1ZSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgcjItPnZhbHVlIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCByMy0+dmFsdWUgPDwgc3RkOjplbmRsOwoJCglyZXR1cm4gMDsKfQo=