Skip to content

Instantly share code, notes, and snippets.

@jagbolanos
Created March 16, 2012 14:12
Show Gist options
  • Select an option

  • Save jagbolanos/2050221 to your computer and use it in GitHub Desktop.

Select an option

Save jagbolanos/2050221 to your computer and use it in GitHub Desktop.
Java is by-value, by-reference or by-sharing? Illustrated with C++
#include <iostream>
class Objeto {
public:
int x;
};
void objeto_por_valor_modificar_miembro(Objeto o) {
o.x = 20;
}
void objeto_por_referencia_modificar_miembro(Objeto &o) {
o.x = 20;
}
void apuntador_por_valor_modificar_miembro(Objeto *o) {
o->x = 20;
}
void objeto_por_valor_asignar(Objeto o) {
Objeto nuevoObjeto;
nuevoObjeto.x = 30;
o = nuevoObjeto;
}
void objeto_por_referencia_asignar(Objeto &o) {
Objeto nuevoObjeto;
nuevoObjeto.x = 30;
o = nuevoObjeto;
}
void apuntador_por_valor_asignar(Objeto *o) {
Objeto *nuevoObjeto = new Objeto;
nuevoObjeto->x = 30;
o = nuevoObjeto;
//Memory leak, no hacemos delete
}
using namespace std;
int main() {
Objeto objeto_por_valor, objeto_por_referencia; //Donde existe la variable y donde existe el objeto?
Objeto *apuntador = new Objeto; //Donde existe la variable y donde existe el objeto?
objeto_por_valor.x = 10;
objeto_por_referencia.x = 10;
apuntador->x = 10;
cout <<"ORIGINALES:"<<endl;
cout <<"Por valor: "<<objeto_por_valor.x<<" Por referencia: "<<objeto_por_referencia.x<<" Apuntador: "<<apuntador->x<<endl;
objeto_por_valor_modificar_miembro(objeto_por_valor);
objeto_por_referencia_modificar_miembro(objeto_por_referencia);
apuntador_por_valor_modificar_miembro(apuntador);
cout<<"MODIFICAR MIEMBRO"<<endl;
cout <<"Por valor: "<<objeto_por_valor.x<<" Por referencia: "<<objeto_por_referencia.x<<" Apuntador: "<<apuntador->x<<endl;
objeto_por_valor_asignar(objeto_por_valor);
objeto_por_referencia_asignar(objeto_por_referencia);
apuntador_por_valor_asignar(apuntador);
cout <<"ASIGNAR"<<endl;
cout <<"Por valor: "<<objeto_por_valor.x<<" Por referencia: "<<objeto_por_referencia.x<<" Apuntador: "<<apuntador->x<<endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment