• Ir al contenido
  • Ir a la navegación
  • Ir al buscador
 
Infoudo
ING English
Directorio WAP para móvil, Tablet, iPhone o Smartphone

Centro de Noticias de la Universidad de Oriente

Categorías

 

Inicio  |  Contacto  |  Posts  |  TIENDA PUBLISHOP  |  Sobre nosotros  |  Registro y Planes  |  Pagos  |  Donaciones

Ver Código QR de esta página

Campaña #AyudemosaYuli  |  Campaña #AyudemosaStephany.  |  ¿Interesado(a) en cursos y resolución de ejercicios de materias prácticas? Para más información, contáctenos por: Teléfono: +58 (412) - 8226575. WhatsApp y Telegram: +58 (426) - 6836955 o escriba al correo: [email protected]. Únete al grupo: SISTEMAS (UDOMO).

[»] **Musica para tu celular

WEB TRANSLATOR

LINK for English Language

Use this link for translate into English


+ Buscar en InfoUDO

 

Parámetros por valor y por referencia de datos simples

Tweet
 

lunes julio 11, 2016

En C++ hay dos formas de pasar parámetros a un método: por valor o por referencia.

Hasta ahora siempre hemos pasado los parámetros por valor, cuando pasamos un tipo de dato simple (int, float etc.) se hace una copia del dato en otra parte de la memoria. Veremos que podemos pasar una variable y que el parámetro pueda acceder y modificar directamente la variable que le pasamos.

Veamos en un simple ejemplo como es el funcionamiento y la sintaxis para trabajar con parámetros por valor y por referencia:

Programa:

#include<iostream>

using namespace std;

class Prueba {
public:
    void cambiar1(int z);
    void cambiar2(int &z);
};

void Prueba::cambiar1(int z)
{
    z = 0;
}

void Prueba::cambiar2(int &z)
{
    z = 0;
}

void main()
{
    Prueba prueba1;
    int num = 10;
    cout << "Valor de la variable num:" << num << "";
    prueba1.cambiar1(num);
    cout << "Valor de la variable num luego de enviarla por valor:" << num << "";
    prueba1.cambiar2(num);
    cout << "Valor de la variable num luego de enviarla por referencia:" << num << "";
    cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :

ParametrosValorReferencia1.zip

Los parámetros por valor solo se le antecede el nombre del tipo de dato:

void Prueba::cambiar1(int z)
{
    z = 0;
}

El parámetro z recibe una copia del valor almacenado en la variable num definida en la main. Cuando modificamos z con el valor 0 no se modifica la variable num definida en la main.

Los parámetros por referencia se les antecede al nombre del parámetro el caracter &. Un parámetro por referencia es como un alias del nombre de la variable que le pasamos desde la main. En nuestro ejemplo el parámetro z accede directamente al contenido de la variable num que definimos en la main:

void Prueba::cambiar2(int &z)
{
    z = 0;
}

Cuando modificamos z estamos realmente modificando la variable num definida en la main.

En la main hemos llamado a estos dos métodos a partir de un objeto:

void main()
{
    Prueba prueba1;
    int num = 10;
    //Se imprime un 10 que es lo que tiene la variable num
    cout << "Valor de la variable num:" << num << "";
    prueba1.cambiar1(num);
    //Se imprime un 10 ya que el método cambiar1 no puede modificar la variable num
    cout << "Valor de la variable num luego de enviarla por valor:" << num << "";
    prueba1.cambiar2(num);
    //Se imprime un 0 ya que el método cambiar2 modificó el parámetro por referencia con un 0.
    cout << "Valor de la variable num luego de enviarla por referencia:" << num << "";
    cin.get();
}

Problema:

Plantear una clase Vector que permita definir y cargar un vector de 5 elementos enteros. Definir un método que retorne el mayor y menor elemento del vector mediante dos parámetros por referencia.

Programa:

#include <iostream>

using namespace std;

class Vector {
    int vec[5];
public:
    void cargar();
    void imprimir();
    void mayorMenor(int &may, int &men);
};

void Vector::cargar()
{
    for (int f = 0; f < 5; f++)
    {
        cout << "Ingrese elemento:";
        cin >> vec[f];
    }
}

void Vector::imprimir()
{
    for (int f = 0; f < 5; f++)
    {
        cout << vec[f] << "-";
    }
    cout << "";
}

void Vector::mayorMenor(int &may, int &men)
{
    may = vec[0];
    men = vec[0];
    for (int f = 1; f < 5; f++)
    {
        if (vec[f]>may)
            may = vec[f];
        else
            if (vec[f] < men)
                men = vec[f];
    }
}

void main()
{
    Vector vector1;
    vector1.cargar();
    vector1.imprimir();
    int mayor, menor;
    vector1.mayorMenor(mayor, menor);
    cout << "Mayor elemento del vector:" << mayor << "";
    cout << "Menor elemento del vector:" << menor << "";
    cin.get();
    cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :

ParametrosValorReferencia2.zip

Como tenemos que retornar dos valores (mayor y menor elemento) a la main implementamos un método con dos parámetros por referencia:

void Vector::mayorMenor(int &may, int &men)
{
    may = vec[0];
    men = vec[0];
    for (int f = 1; f < 5; f++)
    {
        if (vec[f]>may)
            may = vec[f];
        else
            if (vec[f] < men)
                men = vec[f];
    }
}

Cuando modificamos los parámetros may y men en realidad estamos modificando las variables definidas en la main llamadas mayor y menor:

    int mayor, menor;
    vector1.mayorMenor(mayor, menor);
    cout << "Mayor elemento del vector:" << mayor << "";
    cout << "Menor elemento del vector:" << menor << "";
— @INFOUDO.OFICIAL

— Síguenos en Facebook@INFOUDO.OFICIAL

Categorías: #C++, #


[0] Atrás | Directorio
« Inicio
Apps Infoudo
Apps Infoudo ¡Descarga el icono directo en el menú de tu equipo!
[»] Las mejores Apps para tu celular
[»] Imágenes Gratis


Comenta o lee lo que otros opinan

COMPÁRTELO:

Indica que te gusta y comparte

Me Gusta :)Facebook Tuiteame :)Twitter .WhatsApp .Telegram . LinkedIn

También te puede interesar:

NOCIONES BÁSICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS.
Material de Apoyo del Curso de Programación - Lenguaje C++ - Periodo (Feb - May) del año en curso
Parámetros por valor y por referencia de objetos
Métodos constantes (const)
Parámetros de un método constante (const)
Definición de constantes (const)
Directiva #define
Puntero this
Métodos estáticos de una clase
Atributos estáticos de una clase


« Métodos constantes (const)  |  Parámetros por valor y por referencia de objetos »
 
Apps Infoudo
 
Buscador:
Powered by Google:


Web móvil
Imágenes
La Web

 

Síguenos por RSS


Puedes leerlos mediante el navegador Firefox, lectores de noticias en la computadora o el móvil o usando el servicio de Feedburner de Google para recibir las notificaciones por correo electrónico.
RSS - Suscribirse usando Feedburner de Google

email Recibir las nuevas publicaciones de Infoudo por email

Atom


»Ir a URL
.....
Registra Gratis Tu Negocio
....
Sugerir un nuevo sitio WAP

...
¡Bloguea Ya!

..
Registro de Profesionales(Abogados, escritores, doctores, licenciados, ingenieros, etc.)
.
Soporte

Síguenos en las redes sociales

Síguenos en Facebook facebook.com/INFOUDO.OFICIAL Síguenos en Twitter @infoudomon Síguenos en Instagram @infoudooficial Síguenos en Telegram t.me/Infoudooficial
Síguenos en Facebook facebook.com/tuinfou Síguenos en Twitter @infoudomonagas
Síguenos en WhatsApp INFO UDO Síguenos en YouTube youtube.com/@infoudooficial
Síguenos en Facebook facebook.com/SergioAlemanFans Síguenos en Twitter @SergioAleman1 Síguenos en Instagram @sergioalemanfans
Síguenos en WhatsApp wa.me/qr/Y7Q232VLZPR5O1 Síguenos en Tiktok @sergioalemanoficial Síguenos en Tiktok @sergioalemanfans
Síguenos en Telegram t.me/SergioAlemanOficial Síguenos en YouTube youtube.com/@sergioaleman
Síguenos en Facebook facebook.com/boludooficial Síguenos en Twitter @bolUDOoficial Síguenos en Instagram @boludooficial Síguenos en Telegram t.me/Boludooficial
Síguenos en WhatsApp BolUDOoficial Síguenos en YouTube youtube.com/@boludo.oficial

Mis cuentas sociales

FB
Twitter
Pinterest
Instagram
Otras

Móvil: (0426 683 6955 - 0412 8226575) - E-mail: [email protected] - [email protected] - WhatsApp: +58 (0426) 683.69.55


Copyscape
Volver arriba

Protocolo  |  Mapa del Sitio  |  Report Abuse - DMCA  |  Términos y Condiciones  |  Ayuda  |  Privacidad de Datos  |  Política de Cookies  |  Reportar un bug  |  Licencia: CC BY-NC-ND 3.0

Copyright ©2023 Infoudo. Todos los derechos reservados. Diseñado y Desarrollado por Sergio Alemán Mi perfil en GitHub


SUBIR