Created
March 16, 2012 14:12
-
-
Save jagbolanos/2050221 to your computer and use it in GitHub Desktop.
Java is by-value, by-reference or by-sharing? Illustrated with C++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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