References


Reference

When calling a function, the parameters of a function are copied to a new set of variables. When the performance of the program is critical, a reference can be used to pass a variable without creating a copy of it. Reference can save memory and execution time in a program. In the code shown below, the function takes a parameter called input. When the function is called, the variable input is created and the value of temperature is assigned to the variable input. That is, the variable input is a copy of the variable temperature.
Cuando se llama una función, los parámetros de una función son copiados a un nuevo conjunto de variables. Cuando la velocidad del programa es crítica, una referencia se puede usar para pasar la variable sin crear una copia de esta. Las referencias pueden ahorrar memoria y tiempo de ejecución en un programa. En el código mostrado debajo, la función toma un parámetro llamado input. Cuando la función es llamada, la variable input es creada y el valor de temperature es asignado a la variable input. Esto es, la variable input es una copia de la variable temperature.

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     Program()
     {
     }
     ~Program()
     {
     }
     int MyFunction(int input);
protected:
     ...
};

Program.cpp
void Program::Window_Open(Win::Event& e)
{
     int temperature = 18;
     int power = MyFunction(temperature);
}

int Program::MyFunction(int input)
{
     return 2*input;
}


Tip
In other cases, a reference can be used to create a variable that can be used for input and output in a function. In the program below, the variable level is declared as reference by using an ampersand after the variable data type. In this case, the variable level is another name to access the variable input. That is, if the value of level is modified in the function, the value of input will also be modified. In other words, the variable level can be used to return a value from the function. If you do not want to modify the variable inside the function, you must use

int MyFunction(const int& input);
En otros casos, una referencia puede ser usada para crear una variable que pueda ser usada para entrada y salida en una función. En el programa de abajo, la variable level es declarada como una referencia al usar un ampersan después del tipo de variable. En este caso, la variable level es otro nombre para accesar a la variable input. Esto es, si la variable level se modifica en la función, el valor de input también se modificará. En otras palabras, la variable level puede ser usada para regresar un valor de la función. Si usted no quiere modificar la variable dentro de la función, usted debe usar

int MyFunction(const int& input);

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     Program()
     {
     }
     ~Program()
     {
     }
     int Recepter(int& level); // level can be modified inside the function
     //int Recepter(const int& level); // level cannot be modified inside the function
protected:
     ...
};

Program.cpp
void Program::Window_Open(Win::Event& e)
{
     int input = 22;
     int power = Recepter(input);
     this->Text = Sys::Convert::ToString(input);
}

int Program:: Recepter (int& level)
{
     level++;
     return 2*level;
}

Tip
In the previous code, the level variable is the same variable as the input variable. level is another name to get access to the input variable. When the function Recepter increments the value of level, the value of input is also incremented.
En el ejemplo previo, la variable level es la misma variable que la variable input. level es otro nombre para accesar a la variable input. Cuando la función Recepter incrementa el valor de level, implicitamente se incrementa el valor de input.

Problem 1
Compute the output of the program.
Calcule la salida del programa.

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     Program()
     {
     }
     ~Program()
     {
     }
     int Cover(int input);
protected:
     ...
};

Program.cpp
void Program::Window_Open(Win::Event& e)
{
     int n = 20;
     int x = Cover(n);
     wstring texto;
     Sys::Format(texto, L"%d - %d", n, x);
     this->MessageBox(texto, texto, MB_OK);
}

int Program::Cover(int x)
{
     x++;
     return x*2;
}

Problem 2
Compute the output of the program.
Calcule la salida del programa.

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     Program()
     {
     }
     ~Program()
     {
     }
     int Covera(int& entrada);
protected:
     ...
};

Program.cpp
void Program::Window_Open(Win::Event& e)
{
     int n = 20;
     int x = Covera(n);
     wstring texto;
     Sys::Format(texto, L"***%d *** %d***", n, x);
     this->MessageBox(texto, L"Reference", MB_OK);
}

int Program::Covera(int& entrada)
{
     entrada++;
     return entrada*10;
}

Problem 3
Compute the output of the program.
Calcule la salida del programa.

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     Program()
     {
     }
     ~Program()
     {
     }
     int Tunning(double& frequency, int& channels, bool isHD);
protected:
     ...
};

Program.cpp
void Program::Window_Open(Win::Event& e)
{
     wstring text;
     double frequency = 1.0;
     int channels = 2;
     bool isHighDefinition = true;
     int x = Tunning(frequency, channels, isHighDefinition);
     Sys::Format(text, L"frequency = %g\r\nchannels = %d\r\n x = %d", frequency, channels, x);
     this->MessageBox(text, L"1", MB_OK);
     //
     x = Tunning(frequency, channels, isHighDefinition);
     Sys::Format(text, L"frequency = %g\r\nchannels = %d\r\n x = %d", frequency, channels, x);
     this->MessageBox(text, L"2", MB_OK);
}

int Program::Tunning(double& frequency, int& channels, bool isHD)
{
     frequency = 2.0*M_PI*frequency;
     if (channels == 2) frequency += 10.0;
     if (isHD == true) channels++;
     isHD = false;
     return channels%2;
}

Tip
In the previous problem:
  • frequency is an input and output variable
  • channels is an input and output variable
  • isHD is an input variable
  • The function returns an output variable

En el problema anterior:
  • frequency es de entrada y es de salida
  • channels es de entrada y es de salida
  • isHD es de entrada
  • La función regresa un valor de salida

Tip
It is possible to pass any type of data to a function including textboxes, buttons, etc. In order to know the data type of any variable, place the mouse over the variable. The example below shows how to declare a function passing by reference a textbox.
Es posible pasar cualquier tipo de datos a una función incluyendo cajas de texto, botones, etc. A fin de conocer el tipo de datos de cualquier variable, solo coloque el ratón sobre la variable. El ejemplo de abajo muestra como declarar una función pasando por referencia una caja de texto.

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     Program()
     {
     }
     ~Program()
     {
     }
     void SetBand(Win::Textbox& textbox);
protected:
     ...
};

DataType

Problem 4
In the code, what is the purpose of the ampersand, &?
En el código, cuál es el propósito del ampersand, &?

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     struct Human
     {
     wstring name;
     wstring mother_name;
     wstring father_name;
     int age;
     double weight;
     wstring story_of_his_life;
     };
     int Process(Human& human);
protected:
     ...
};


Program.cpp
void Program::Window_Open(Win::Event& e)
{
     Human melchor;
     melchor.name = L"Melchor";
     ...
     const int x = Process(melchor);
     this->Text = melchor.name;
}

int Program::Process(Human& human)
{
     human.name = L"Mary";
     return human.age;
}


Problem 5
In the code, what is the purpose of the ampersand, &?
En el código, cuál es el propósito del ampersand, &?

Program.h
#pragma once //______________________________________ Program.h
#include "resource.h"

class Program: public Win::Dialog
{
public:
     struct Human
     {
     wstring name;
     wstring mother_name;
     wstring father_name;
     int age;
     double weight;
     wstring story_of_his_life;
     };
     int Process(const Human& human);
protected:
     ...
};


Program.cpp
void Program::Window_Open(Win::Event& e)
{
     Human melchor;
     melchor.name = L"Melchor";
     ...
     const int x = Process(melchor);
     this->Text = melchor.name;
}

int Program::Process(const Human& human)
{
     human.name = L"Mary"; // THIS WILL NOT COMPILE
     return human.age;
}

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home