CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Librerías más usadas en C++
iostream
Es definitivamente la librería que más estaremos utilizando, pues es una muy
completa, tiene muchas funciones sencillas que son muy utilizadas, al incluirla en
nuestro código fuente generalmente evitamos tener que incluir más librerías. Está
especializada en la lectura y escritura de archivos. Es exclusiva de C++.
cmath
Declara un conjunto de funciones principalmente para operaciones matemáticas y
transformaciones. Incluye funciones
como sin(), cos(), tan(), exp(), log(), pow(), sqrt(), abs(). Se puede usar en
C/C++.
cstring
Declara un conjunto de funciones principalmente para manipulación de elementos
tipo string. Algunas funciones que incluye
son strcat() memcmp() strpbrk() strlen() memset(). Se puede usar en C/C++.
Prof. Juan Mansilla Neyra Pág. 1
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
ctime
Declara un conjunto de funciones para obtener y manipular información de tiempo
y fecha. Incluye funciones como: clock() difftime() mktime() time(). Se puede
usar en C/C++.
algorithm
Define una colección de funciones especialmente diseñadas para utilizarse
en rangos de elementos. Además incluye la mayoría de los contenedores de
la STL. Algunas funciones que incluye
son: find() count() swap() reverse() sort() merge(). Exclusiva de C++.
bits/stdc++.h
Esta es algo así como una súper librería. Incluye todas las librerías estándar y de
STL, es decir, podrías sólo incluir esta siempre y no necesitarías incluir otra. Sin
embargo funciona precompilando todas las librerías que incluye, sólo que lo hace
en una sola línea, por lo que incluye librerías que podríamos no usar, esto hace que
el tiempo de compilación sea mayor.
Prof. Juan Mansilla Neyra Pág. 2
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Puedes ver todas las librerías que se integran al agregar bits/stdc++.h viendo su
código fuente acá. Como notarás son demasiadas que muy probablemente no
usaremos.
Debido a esto y aunque su uso es muy práctico, sugiero no utilizarla al hacer
nuestros programas, es preferible que incorpores una a una las librerías que
usaremos. Además no todos los compiladores y evaluadores soportan este fichero.
Sin embargo es algo útil conocer y llegar a utilizar en pruebas, por ejemplo.
NOTAS:
#include → Identifica el nombre de una librería.
Using namespace → Indica el uso de la variable std;
int main(){ } → Nombre de la función principal para ejecutar los códigos C++
cout << → Objeto que permite mostrar mensaje de salida
cin>> → Objeto que permite ingresar un dato
Returno 0; → Retorna o imprima lo indicado en la función principal
endl; → Objeto que genera una línea en blanco
Ejemplo 1:
Se muestra el mensaje Hola Mundo
#include <iostream>
using namespace std;
int main() {
cout << "Hello World! \n";
return 0;
}
Prof. Juan Mansilla Neyra Pág. 3
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ejemplo 2:
Se muestra 2 mensajes deja un espacio en blanco.
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
cout << "I am learning C++";
return 0;
}
Variables C++
Las variables son contenedores para almacenar valores de datos.
En C++, existen diferentes tipos de variables (definidas con diferentes
palabras clave), por ejemplo:
• int- almacena enteros (números enteros), sin decimales, como 123 o -
123
• double- almacena números de coma flotante, con decimales, como
19.99 o -19.99
• char- almacena caracteres individuales, como 'a' o 'B'. Los valores de
char están entre comillas simples
• string- almacena texto, como "Hello World". Los valores de cadena
están entre comillas dobles
• bool- almacena valores con dos estados: verdadero o falso
Declarar (crear) variables
Para crear una variable, especifique el tipo y asígnele un valor:
Sintaxis
type variableName = value;
Ejemplo
Cree una variable llamada myNum de tipo int y asígnele el valor 15 :
Prof. Juan Mansilla Neyra Pág. 4
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
int myNum = 15;
cout << myNum;
Una demostración de otros tipos de datos:
Ejemplo
int myNum = 5; // Integer (whole number without
decimals)
double myFloatNum = 5.99; // Floating point number (with decimals)
char myLetter = 'D'; // Character
string myText = "Hello"; // String (text)
bool myBoolean = true; // Boolean (true or false)
Mostrar variables
El cout objeto se utiliza junto con el << operador para mostrar variables.
Para combinar texto y una variable, sepárelos con el << operador:
Ejemplo
int myAge = 35;
cout << "I am " << myAge << " years old.";
Agregar variables juntas
Para agregar una variable a otra variable, puede usar el + operador:
Ejemplo
int x = 5;
int y = 6;
int sum = x + y;
cout << sum;
Prof. Juan Mansilla Neyra Pág. 5
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Declarar muchas variables
Para declarar más de una variable del mismo tipo, use una lista separada por
comas:
Ejemplo
int x = 5, y = 6, z = 50;
cout << x + y + z;
Un valor para múltiples variables
También puede asignar el mismo valor a múltiples variables en una línea:
Ejemplo
int x, y, z;
x = y = z = 50;
cout << x + y + z;
Identificadores de C++
Todas las variables de C++ deben identificarse con nombres únicos.
Estos nombres únicos se denominan identificadores.
Los identificadores pueden ser nombres cortos (como x e y) o nombres más
descriptivos (edad, suma, volumen total).
Nota: Se recomienda utilizar nombres descriptivos para crear un código
comprensible y mantenible:
Ejemplo
// Good
int minutesPerHour = 60;
// OK, but not so easy to understand what m actually is
Prof. Juan Mansilla Neyra Pág. 6
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
int m = 60;
Las reglas generales para nombrar variables son:
• Los nombres pueden contener letras, dígitos y guiones bajos.
• Los nombres deben comenzar con una letra o un guión bajo (_)
• Los nombres distinguen entre mayúsculas y minúsculas
( myVary myvarson variables diferentes)
• Los nombres no pueden contener espacios en blanco ni caracteres
especiales como !, #, %, etc.
• Las palabras reservadas (como las palabras clave de C++, como int) no
se pueden usar como nombres
constantes
Cuando no desee que otros (o usted mismo) anulen los valores de las variables
existentes, use la const palabra clave (esto declarará la variable como
"constante", lo que significa que no se puede modificar y es de solo
lectura):
Ejemplo
const int myNum = 15; // myNum will always be 15
myNum = 10; // error: assignment of read-only variable 'myNum'
Siempre debe declarar la variable como constante cuando tiene valores que es
poco probable que cambien:
Ejemplo
const int minutesPerHour = 60;
const float PI = 3.14;
Entrada de usuario de C++
Ya ha aprendido que coutse utiliza para generar (imprimir) valores. Ahora
usaremos cinpara obtener la entrada del usuario.
Prof. Juan Mansilla Neyra Pág. 7
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Cin es una variable predefinida que lee datos del teclado con el operador de
extracción ( >>).
En el siguiente ejemplo, el usuario puede ingresar un número, que se
almacena en la variable x. Luego imprimimos el valor de x:
Ejemplo
int x;
cout << "Type a number: "; // Type a number and press enter
cin >> x; // Get user input from the keyboard
cout << "Your number is: " << x; // Display the input value
Bueno saber
Cout se pronuncia "see-out". Se utiliza para la salida y utiliza el operador de
inserción ( <<)
Cin se pronuncia "ver-en". Se utiliza para la entrada y utiliza el operador de
extracción ( >>)
Crear una calculadora simple
En este ejemplo, el usuario debe ingresar dos números. Luego imprimimos la
suma calculando (sumando) los dos números:
Ejemplo
int x, y;
int sum;
cout << "Type a number: ";
cin >> x;
cout << "Type another number: ";
cin >> y;
sum = x + y;
cout << "Sum is: " << sum;
Prof. Juan Mansilla Neyra Pág. 8
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Tipos de datos de C++
Como se explicó en el capítulo Variables, una variable en C++ debe ser un tipo
de datos específico:
Ejemplo
int myNum = 5; // Integer (whole number)
float myFloatNum = 5.99; // Floating point number
double myDoubleNum = 9.98; // Floating point number
char myLetter = 'D'; // Character
bool myBoolean = true; // Boolean
string myText = "Hello"; // String
Tipos de datos básicos
El tipo de datos especifica el tamaño y el tipo de información que almacenará
la variable:
Data Type Size Description
boolean 1 byte Stores true or false values
char 1 byte Stores a single character/letter/number, or ASCII values
int 2 or 4 bytes Stores whole numbers, without decimals
float 4 bytes Stores fractional numbers, containing one or more
decimals. Sufficient for storing 7 decimal digits
double 8 bytes Stores fractional numbers, containing one or more
decimals. Sufficient for storing 15 decimal digits
Tipos numéricos
Utilícelo int cuando necesite almacenar un número entero sin decimales, como
35 o 1000, float o double cuando necesite un número de punto flotante (con
decimales), como 9,99 o 3,14515.
Prof. Juan Mansilla Neyra Pág. 9
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ent
int myNum = 1000;
cout << myNum;
flotar
float myNum = 5.75;
cout << myNum;
Doble
double myNum = 19.99;
cout << myNum;
float contra double
La precisión de un valor de punto flotante indica cuántos dígitos puede tener el
valor después del punto decimal. La precisión de float es de sólo seis o siete
dígitos decimales, mientras que double las variables tienen una precisión de
unos 15 dígitos. Por lo tanto, es más seguro usarlo double para la mayoría de
los cálculos.
Números científicos
Un número de punto flotante también puede ser un número científico con una
"e" para indicar la potencia de 10:
Ejemplo
float f1 = 35e3;
double d1 = 12E4;
cout << f1;
cout << d1
Prof. Juan Mansilla Neyra Pág. 10
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Tipos booleanos
Un tipo de datos booleano se declara con la bool palabra clave y solo puede
tomar los valores true o false.
Cuando se devuelve el valor, true = 1 y false = 0.
Ejemplo
bool isCodingFun = true;
bool isFishTasty = false;
cout << isCodingFun; // Outputs 1 (true)
cout << isFishTasty; // Outputs 0 (false)
Tipos de caracteres
El char tipo de datos se utiliza para almacenar un solo carácter. El carácter
debe estar entre comillas simples, como 'A' o 'c':
Ejemplo
char myGrade = 'B';
cout << myGrade;
Alternativamente, puede usar valores ASCII para mostrar ciertos caracteres:
Ejemplo
char a = 65, b = 66, c = 67;
cout << a;
cout << b;
cout << c;
Prof. Juan Mansilla Neyra Pág. 11
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Tipos de cadenas
El string tipo se utiliza para almacenar una secuencia de caracteres
(texto). Este no es un tipo incorporado, pero se comporta como tal en su uso
más básico. Los valores de cadena deben estar entre comillas dobles:
Ejemplo
string greeting = "Hello";
cout << greeting;
Para usar cadenas, debe incluir un archivo de encabezado adicional en el
código fuente, la <string>biblioteca:
Ejemplo
// Include the string library
#include <string>
// Create a string variable
string greeting = "Hello";
// Output string value
cout << greeting;
Operadores de C++
Los operadores se utilizan para realizar operaciones en variables y valores.
En el siguiente ejemplo, usamos el + operador para sumar dos valores:
Ejemplo
int x = 100 + 50;
Aunque el +operador se usa a menudo para sumar dos valores, como en el
ejemplo anterior, también se puede usar para sumar una variable y un valor, o
una variable y otra variable:
Prof. Juan Mansilla Neyra Pág. 12
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ejemplo
int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)
C++ divide a los operadores en los siguientes grupos:
• Operadores aritméticos
• Operadores de Asignación
• Operadores de comparación
• Operadores logicos
• Operadores bit a bit
Operadores aritméticos
Los operadores aritméticos se utilizan para realizar operaciones
matemáticas comunes.
Operator Name Description Example
+ Addition Adds together two values x+y
- Subtraction Subtracts one value from another x-y
* Multiplication Multiplies two values x*y
/ Division Divides one value by another x/y
% Modulus Returns the division remainder x%y
++ Increment Increases the value of a variable by 1 ++x
-- Decrement Decreases the value of a variable by 1 --x
Operadores de Asignación
Los operadores de asignación se utilizan para asignar valores a las
variables.
Prof. Juan Mansilla Neyra Pág. 13
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
En el siguiente ejemplo, usamos el operador de asignación= ( ) para
asignar el valor 10 a una variable llamada x :
Ejemplo
int x = 10;
El operador de asignación+= de suma ( ) agrega un valor a una variable:
Ejemplo
int x = 10;
x += 5;
Una lista de todos los operadores de asignación:
Operator Example Same As
= x=5 x=5
+= x += 3 x=x+3
-= x -= 3 x=x-3
*= x *= 3 x=x*3
/= x /= 3 x=x/3
%= x %= 3 x=x%3
&= x &= 3 x=x&3
|= x |= 3 x=x|3
^= x ^= 3 x=x^3
>>= x >>= 3 x = x >> 3
<<= x <<= 3 x = x << 3
Prof. Juan Mansilla Neyra Pág. 14
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Operadores de comparación
Los operadores de comparación se utilizan para comparar dos valores.
Nota: El valor de retorno de una comparación es verdadero ( 1) o falso ( 0).
En el siguiente ejemplo, usamos el operador mayor que> ( ) para
averiguar si 5 es mayor que 3:
Ejemplo
int x = 5;
int y = 3;
cout << (x > y); // returns 1 (true) because 5 is greater than 3
Una lista de todos los operadores de comparación:
Operator Name Example
== Equal to x == y
!= Not equal x != y
> Greater than x>y
< Less than x<y
>= Greater than or x >= y
equal to
<= Less than or x <= y
equal to
Prof. Juan Mansilla Neyra Pág. 15
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Operadores lógicos
Los operadores lógicos se utilizan para determinar la lógica entre variables
o valores:
Operator Name Description Example
&& Logical and Devuelve verdadero si ambas afirmaciones son x < 5 && x < 10
verdaderas
|| Logical or Devuelve verdadero si una de las afirmaciones x < 5 || x < 4
es verdadera
! Logical not Invierte el resultado, devuelve falso si el !(x < 5 && x < 10)
resultado es verdadero
Cadenas C++
Las cadenas se utilizan para almacenar texto.
Una stringvariable contiene una colección de caracteres entre comillas
dobles:
Ejemplo
Cree una variable de tipo stringy asígnele un valor:
string greeting = "Hello";
Para usar cadenas, debe incluir un archivo de encabezado adicional en el
código fuente, la <string>biblioteca:
Ejemplo
// Include the string library
#include <string>
// Create a string variable
string greeting = "Hello";
Prof. Juan Mansilla Neyra Pág. 16
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Concatenación de cadenas
El +operador se puede utilizar entre cadenas para sumarlas y crear una
nueva cadena. Esto se llama concatenación :
Ejemplo
string firstName = "John ";
string lastName = "Doe";
string fullName = firstName + lastName;
cout << fullName;
En el ejemplo anterior, agregamos un espacio después de firstName para
crear un espacio entre John y Doe en la salida. Sin embargo, también
puede agregar un espacio con comillas ( " "o ' '):
Ejemplo
string firstName = "John";
string lastName = "Doe";
string fullName = firstName + " " + lastName;
cout << fullName;
Adjuntar
Una cadena en C++ es en realidad un objeto, que contiene funciones que
pueden realizar ciertas operaciones en cadenas. Por ejemplo, también
puedes concatenar cadenas con la append()función:
Ejemplo
string firstName = "John ";
string lastName = "Doe";
Prof. Juan Mansilla Neyra Pág. 17
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
string fullName = [Link](lastName);
cout << fullName;
Adición de números y cadenas
¡ADVERTENCIA!
C++ usa el +operador tanto para la suma como para la concatenación .
Se agregan números. Las cadenas se concatenan.
Si sumas dos números, el resultado será un número:
Ejemplo
int x = 10;
int y = 20;
int z = x + y; // z will be 30 (an integer)
Si agrega dos cadenas, el resultado será una concatenación de cadenas:
Ejemplo
string x = "10";
string y = "20";
string z = x + y; // z will be 1020 (a string)
Si intenta agregar un número a una cadena, se produce un error:
Ejemplo
string x = "10";
int y = 20;
string z = x + y;
Prof. Juan Mansilla Neyra Pág. 18
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Longitud de la cuerda
Para obtener la longitud de una cadena, use la length() función:
Ejemplo
string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout << "The length of the txt string is: " << [Link]();
Sugerencia: Es posible que vea algunos programas de C++ que usan
la size()función para obtener la longitud de una cadena. Esto es solo un
alias de length(). Depende completamente de usted si desea
usar length() o size():
Ejemplo
string txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout << "The length of the txt string is: " << [Link]();
Cadenas de acceso
Puede acceder a los caracteres de una cadena haciendo referencia a su
número de índice entre corchetes [].
Este ejemplo imprime el primer carácter en myString :
Ejemplo
string myString = "Hello";
cout << myString[0];
// Outputs H
Nota: Los índices de cadena comienzan con 0: [0] es el primer
carácter. [1] es el segundo carácter, etc.
Este ejemplo imprime el segundo carácter en myString :
Prof. Juan Mansilla Neyra Pág. 19
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ejemplo
string myString = "Hello";
cout << myString[1];
// Outputs e
Cambiar caracteres de cadena
Para cambiar el valor de un carácter específico en una cadena, consulte el
número de índice y use comillas simples:
Ejemplo
string myString = "Hello";
myString[0] = 'J';
cout << myString;
// Outputs Jello instead of Hello
Cadenas de entrada del usuario
Es posible usar el operador de extracción >> on cin para mostrar una
cadena ingresada por un usuario:
Ejemplo
string firstName;
cout << "Type your first name: ";
cin >> firstName; // get user input from the keyboard
cout << "Your name is: " << firstName;
// Type your first name: John
// Your name is: John
Sin embargo, cin considera un espacio (espacio en blanco, tabuladores,
etc.) como un carácter de terminación, lo que significa que solo puede
mostrar una sola palabra (incluso si escribe muchas palabras):
Prof. Juan Mansilla Neyra Pág. 20
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ejemplo
string fullName;
cout << "Type your full name: ";
cin >> fullName;
cout << "Your name is: " << fullName;
// Type your full name: John Doe
// Your name is: John
Del ejemplo anterior, esperaría que el programa imprima "John Doe", pero
solo imprime "John".
Por eso, cuando trabajamos con cadenas, a menudo usamos
la getline() función para leer una línea de texto. Toma cin como primer
parámetro, y la variable de cadena como segundo:
Ejemplo
string fullName;
cout << "Type your full name: ";
getline (cin, fullName);
cout << "Your name is: " << fullName;
// Type your full name: John Doe
// Your name is: John Doe
Omitir espacio de nombres
Es posible que vea algunos programas de C++ que se ejecutan sin la
biblioteca de espacio de nombres estándar. La using namespace std línea se
puede omitir y reemplazar con la std palabra clave, seguida del ::operador
para string (y cout) objetos:
Ejemplo
#include <iostream>
#include <string>
int main() {
std::string greeting = "Hello";
Prof. Juan Mansilla Neyra Pág. 21
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
std::cout << greeting;
return 0;
}
Matemáticas C++
C++ tiene muchas funciones que le permiten realizar tareas matemáticas
en números.
máximo y mínimo
La función se puede usar para encontrar el valor más alto de x e y: max(x,y)
Ejemplo
cout << max(5, 10);
Y la función se puede usar para encontrar el valor más bajo
de x e y :min(x,y)
Ejemplo
cout << min(5, 10);
C++ <cmath> Encabezado
Otras funciones, como sqrt(raíz cuadrada), round (redondea un número)
y log (logaritmo natural), se pueden encontrar en el <cmath>archivo de
encabezado:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 22
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
// Include the cmath library
#include <cmath>
cout << sqrt(64);
cout << round(2.6);
cout << log(2);
Otras funciones matemáticas
Puede encontrar una lista de otras funciones matemáticas populares (de
la <cmath> biblioteca) en la siguiente tabla:
Function Description
abs(x) Returns the absolute value of x
acos(x) Returns the arccosine of x
asin(x) Returns the arcsine of x
atan(x) Returns the arctangent of x
cbrt(x) Returns the cube root of x
ceil(x) Returns the value of x rounded up to its nearest
integer
cos(x) Returns the cosine of x
cosh(x) Returns the hyperbolic cosine of x
exp(x) Returns the value of Ex
expm1(x) Returns ex -1
fabs(x) Returns the absolute value of a floating x
fdim(x, y) Returns the positive difference between x and y
floor(x) Returns the value of x rounded down to its nearest
integer
hypot(x, y) Returns sqrt(x2 +y2) without intermediate overflow
or underflow
Prof. Juan Mansilla Neyra Pág. 23
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
fma(x, y, z) Returns x*y+z without losing precision
fmax(x, y) Returns the highest value of a floating x and y
fmin(x, y) Returns the lowest value of a floating x and y
fmod(x, y) Returns the floating point remainder of x/y
pow(x, y) Returns the value of x to the power of y
sin(x) Returns the sine of x (x is in radians)
sinh(x) Returns the hyperbolic sine of a double value
tan(x) Returns the tangent of an angle
tanh(x) Returns the hyperbolic tangent of a double value
Booleanos de C++
Muy a menudo, en la programación, necesitará un tipo de datos que solo
puede tener uno de dos valores, como:
• SÍ NO
• ENCENDIDO APAGADO
• VERDADERO FALSO
Para ello, C++ dispone de un booltipo de dato, que puede tomar los
valores true (1) o false(0).
Valores booleanos
Una variable booleana se declara con la boolpalabra clave y solo puede
tomar los valores trueo false:
Ejemplo
bool isCodingFun = true;
bool isFishTasty = false;
Prof. Juan Mansilla Neyra Pág. 24
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
cout << isCodingFun; // Outputs 1 (true)
cout << isFishTasty; // Outputs 0 (false)
En el ejemplo anterior, puede leer que un truevalor
devuelve 1y falsedevuelve 0.
Sin embargo, es más común devolver valores booleanos a partir de
expresiones booleanas (consulte la página siguiente)
Expresión booleana
Una expresión booleana es una expresión de C++ que devuelve un valor
booleano: 1(verdadero) o 0(falso).
Puede usar un operador de comparación, como el operador mayor
que ( >), para averiguar si una expresión (o una variable) es verdadera:
Ejemplo
int x = 10;
int y = 9;
cout << (x > y); // returns 1 (true), because 10 is higher than 9
O aún más fácil:
Ejemplo
cout << (10 > 9); // returns 1 (true), because 10 is higher than 9
En los ejemplos a continuación, usamos el operador igual a ( ==) para
evaluar una expresión:
Ejemplo
int x = 10;
cout << (x == 10); // returns 1 (true), because the value of x is
equal to 10
Prof. Juan Mansilla Neyra Pág. 25
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ejemplo
cout << (10 == 15); // returns 0 (false), because 10 is not equal to
15
Condiciones de C++ y declaraciones If
C++ admite las condiciones lógicas habituales de las matemáticas:
• Menos que: a < b
• Menor o igual que: a <= b
• Mayor que: a > b
• Mayor o igual que: a >= b
• Igual a a == b
• No igual a: a != b
Puede usar estas condiciones para realizar diferentes acciones para
diferentes decisiones.
C++ tiene las siguientes declaraciones condicionales:
• Úselo ifpara especificar un bloque de código que se ejecutará, si una
condición especificada es verdadera
• Se usa elsepara especificar un bloque de código a ejecutar, si la
misma condición es falsa
• Úselo else ifpara especificar una nueva condición para probar, si la
primera condición es falsa
• Úselo switchpara especificar muchos bloques alternativos de código
para ejecutar
La declaración Si
Utilice la if declaración para especificar un bloque de código C++ que se
ejecutará si una condición es true.
Sintaxis
Prof. Juan Mansilla Neyra Pág. 26
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
if (condition) {
// block of code to be executed if the condition is true
}
Tenga en cuenta que if está en minúsculas. Las letras mayúsculas (If o IF)
generarán un error.
En el siguiente ejemplo, probamos dos valores para averiguar si 20 es
mayor que 18. Si la condición es true, imprime un texto:
Ejemplo
if (20 > 18) {
cout << "20 is greater than 18";
}
También podemos probar variables:
Ejemplo
int x = 20;
int y = 18;
if (x > y) {
cout << "x is greater than y";
}
La declaración más
Utilice la elseinstrucción para especificar un bloque de código que se
ejecutará si la condición es false.
Sintaxis
if (condition) {
// block of code to be executed if the condition is true
} else {
// block of code to be executed if the condition is false
Prof. Juan Mansilla Neyra Pág. 27
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ejemplo
int time = 20;
if (time < 18) {
cout << "Good day.";
} else {
cout << "Good evening.";
}
// Outputs "Good evening."
Ejemplo explicado
En el ejemplo anterior, el tiempo (20) es mayor que 18, por lo que la
condición es false. Debido a esto, pasamos a la else condición e
imprimimos en la pantalla "Buenas noches". Si el tiempo fuera menor a 18,
el programa imprimiría "Buen día".
La sentencia Else If
Utilice la else if declaración para especificar una nueva condición si la
primera condición es false.
Sintaxis
if (condition1) {
// block of code to be executed if condition1 is true
} else if (condition2) {
// block of code to be executed if the condition1 is false and
condition2 is true
} else {
// block of code to be executed if the condition1 is false and
condition2 is false
}
Ejemplo
Prof. Juan Mansilla Neyra Pág. 28
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
int time = 22;
if (time < 10) {
cout << "Good morning.";
} else if (time < 20) {
cout << "Good day.";
} else {
cout << "Good evening.";
}
// Outputs "Good evening."
Ejemplo explicado
En el ejemplo anterior, el tiempo (22) es mayor que 10, por lo que
la primera condición es false. La siguiente condición, en la else if
declaración, también es false, por lo que pasamos a la else condición, ya
que la condición1 y la condición2 son ambas false, e imprimimos en la
pantalla "Buenas noches".
Sin embargo, si la hora fuera 14, nuestro programa imprimiría "Buen día".
Mano abreviada If...Else (operador
ternario)
También hay un if else abreviado, que se conoce como operador
ternario porque consta de tres operandos. Se puede usar para reemplazar
varias líneas de código con una sola línea. A menudo se usa para
reemplazar declaraciones if else simples:
Sintaxis
variable = (condition) ? expressionTrue : expressionFalse;
En lugar de escribir:
Ejemplo
int time = 20;
if (time < 18) {
Prof. Juan Mansilla Neyra Pág. 29
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
cout << "Good day.";
} else {
cout << "Good evening.";
}
Simplemente puede escribir:
Ejemplo
int time = 20;
string result = (time < 18) ? "Good day." : "Good evening.";
cout << result;
Instrucciones de cambio de C++
Utilice la switch instrucción para seleccionar uno de los muchos bloques de
código que se ejecutarán.
Sintaxis
switch(expression) {
case x:
// code block
break;
case y:
// code block
break;
default:
// code block
}
Así es como funciona:
• La switch expresión se evalúa una vez
• El valor de la expresión se compara con los valores de cada case
• Si hay una coincidencia, se ejecuta el bloque de código asociado
• Las palabras clave break y default son opcionales y se describirán
más adelante en este capítulo.
Prof. Juan Mansilla Neyra Pág. 30
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
El siguiente ejemplo utiliza el número del día de la semana para calcular el
nombre del día de la semana:
Ejemplo
int day = 4;
switch (day) {
case 1:
cout << "Monday";
break;
case 2:
cout << "Tuesday";
break;
case 3:
cout << "Wednesday";
break;
case 4:
cout << "Thursday";
break;
case 5:
cout << "Friday";
break;
case 6:
cout << "Saturday";
break;
case 7:
cout << "Sunday";
break;
}
// Outputs "Thursday" (day 4)
La palabra clave de ruptura
Cuando C++ llega a una break palabra clave, sale del bloque interruptor.
Esto detendrá la ejecución de más código y pruebas de casos dentro del
bloque.
Cuando se encuentra una coincidencia y el trabajo está hecho, es hora de
un descanso. No hay necesidad de más pruebas.
Prof. Juan Mansilla Neyra Pág. 31
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
La palabra clave predeterminada
La default palabra clave especifica algún código para ejecutar si no hay
coincidencia de mayúsculas y minúsculas:
Ejemplo
int day = 4;
switch (day) {
case 6:
cout << "Today is Saturday";
break;
case 7:
cout << "Today is Sunday";
break;
default:
cout << "Looking forward to the Weekend";
}
// Outputs "Looking forward to the Weekend"
Bucles de C++
Los bucles pueden ejecutar un bloque de código siempre que se alcance
una condición específica.
Los bucles son útiles porque ahorran tiempo, reducen los errores y hacen
que el código sea más legible.
C++ Mientras Bucle
El while bucle recorre un bloque de código siempre que una condición
específica sea true:
Sintaxis
while (condition) {
// code block to be executed
Prof. Juan Mansilla Neyra Pág. 32
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
En el siguiente ejemplo, el código en el bucle se ejecutará una y otra vez,
siempre que una variable ( i) sea menor que 5:
Ejemplo
int i = 0;
while (i < 5) {
cout << i << "\n";
i++;
}
El bucle Do/While
El do/while bucle es una variante del while bucle. Este ciclo ejecutará el
bloque de código una vez, antes de verificar si la condición es verdadera,
luego repetirá el ciclo mientras la condición sea verdadera.
Sintaxis
do {
// code block to be executed
}
while (condition);
El siguiente ejemplo utiliza un do/while bucle. El bucle siempre se ejecutará
al menos una vez, incluso si la condición es falsa, porque el bloque de
código se ejecuta antes de que se pruebe la condición:
Ejemplo
int i = 0;
do {
cout << i << "\n";
i++;
}
while (i < 5);
Prof. Juan Mansilla Neyra Pág. 33
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
C++ para bucle
Cuando sepa exactamente cuántas veces desea recorrer un bloque de
código, use el for bucle en lugar de un while bucle:
Sintaxis
for (statement 1; statement 2; statement 3) {
// code block to be executed
}
La declaración 1 se ejecuta (una vez) antes de la ejecución del bloque de
código.
La declaración 2 define la condición para ejecutar el bloque de código.
La declaración 3 se ejecuta (todas las veces) después de que se haya
ejecutado el bloque de código.
El siguiente ejemplo imprimirá los números del 0 al 4:
Ejemplo
for (int i = 0; i < 5; i++) {
cout << i << "\n";
}
Ejemplo explicado
La declaración 1 establece una variable antes de que comience el ciclo (int i
= 0).
La declaración 2 define la condición para que se ejecute el bucle (debe ser
menor que 5). Si la condición es verdadera, el bucle comenzará de nuevo,
si es falsa, el bucle terminará.
La declaración 3 aumenta un valor (i++) cada vez que se ejecuta el bloque
de código en el ciclo.
Prof. Juan Mansilla Neyra Pág. 34
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Otro ejemplo
Este ejemplo solo imprimirá valores pares entre 0 y 10:
Ejemplo
for (int i = 0; i <= 10; i = i + 2) {
cout << i << "\n";
}
descanso C++
Ya ha visto la break declaración utilizada en un capítulo anterior de este
tutorial. Se usaba para "saltar" de una switch declaración.
La break sentencia también se puede utilizar para salir de un bucle .
Este ejemplo salta fuera del bucle cuando ies igual a 4:
Ejemplo
for (int i = 0; i < 10; i++) {
if (i == 4) {
break;
}
cout << i << "\n";
}
C++ Continuar
La continue instrucción interrumpe una iteración (en el bucle), si se produce
una condición específica, y continúa con la siguiente iteración del bucle.
Este ejemplo omite el valor de 4:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 35
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
for (int i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
cout << i << "\n";
}
Interrumpir y continuar en ciclo while
También puede usar break y continue en bucles while:
Ejemplo de descanso
int i = 0;
while (i < 10) {
cout << i << "\n";
i++;
if (i == 4) {
break;
}
}
Continuar Ejemplo
int i = 0;
while (i < 10) {
if (i == 4) {
i++;
continue;
}
cout << i << "\n";
i++;
}
Prof. Juan Mansilla Neyra Pág. 36
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Matrices C++
Las matrices se utilizan para almacenar múltiples valores en una sola
variable, en lugar de declarar variables separadas para cada valor.
Para declarar una matriz, defina el tipo de variable, especifique el nombre
de la matriz seguido de corchetes y especifique la cantidad de elementos
que debe almacenar:
string cars[4];
Ahora hemos declarado una variable que contiene una matriz de cuatro
cadenas. Para insertarle valores, podemos usar una matriz literal: coloque
los valores en una lista separada por comas, dentro de llaves:
string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"};
Para crear una matriz de tres enteros, podría escribir:
int myNum[3] = {10, 20, 30};
Acceder a los Elementos de un Array
Accede a un elemento de matriz haciendo referencia al número de índice
entre corchetes [].
Esta sentencia accede al valor del primer elemento en coches :
Ejemplo
string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars[0];
// Outputs Volvo
Prof. Juan Mansilla Neyra Pág. 37
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Cambiar un elemento de matriz
Para cambiar el valor de un elemento específico, consulte el número de
índice:
cars[0] = "Opel";
Ejemplo
string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"};
cars[0] = "Opel";
cout << cars[0];
// Now outputs Opel instead of Volvo
Bucle a través de una matriz
Puede recorrer los elementos de la matriz con el for bucle.
El siguiente ejemplo genera todos los elementos en la matriz
de automóviles :
Ejemplo
string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0; i < 4; i++) {
cout << cars[i] << "\n";
}
El siguiente ejemplo genera el índice de cada elemento junto con su valor:
Ejemplo
string cars[4] = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0; i < 4; i++) {
cout << i << ": " << cars[i] << "\n";
}
Prof. Juan Mansilla Neyra Pág. 38
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Omitir tamaño de matriz
No tiene que especificar el tamaño de la matriz. Pero si no lo hace, solo
será tan grande como los elementos que se insertan en él:
string cars[] = {"Volvo", "BMW", "Ford"}; // size of array is always
3
Esto está completamente bien. Sin embargo, el problema surge si desea
espacio adicional para elementos futuros. Luego tienes que sobrescribir los
valores existentes:
string cars[] = {"Volvo", "BMW", "Ford"};
string cars[] = {"Volvo", "BMW", "Ford", "Mazda", "Tesla"};
Sin embargo, si especifica el tamaño, la matriz reservará el espacio
adicional:
string cars[5] = {"Volvo", "BMW", "Ford"}; // size of array is 5,
even though it's only three elements inside it
Ahora puede agregar un cuarto y quinto elemento sin sobrescribir los
demás:
Ejemplo
cars[3] = "Mazda";
cars[4] = "Tesla";
Omitir elementos en la declaración
También es posible declarar una matriz sin especificar los elementos en la
declaración y agregarlos más tarde:
Ejemplo
string cars[5];
cars[0] = "Volvo";
Prof. Juan Mansilla Neyra Pág. 39
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
cars[1] = "BMW";
...
Obtener el tamaño de una matriz
Para obtener el tamaño de una matriz, puede usar el sizeof() operador:
Ejemplo
int myNumbers[5] = {10, 20, 30, 40, 50};
cout << sizeof(myNumbers);
Resultado:
20
¿Por qué se muestra el resultado 20en lugar de 5, cuando la matriz
contiene 5 elementos?
Es porque el sizeof()operador devuelve el tamaño de un tipo en bytes .
En el capítulo Tipos de datos aprendió que un int tipo suele tener 4 bytes,
por lo que del ejemplo anterior, 4 x 5 (4 bytes x 5 elementos) = 20 bytes .
Para saber cuántos elementos tiene una matriz , debe dividir el
tamaño de la matriz por el tamaño del tipo de datos que contiene:
Ejemplo
int myNumbers[5] = {10, 20, 30, 40, 50};
int getArrayLength = sizeof(myNumbers) / sizeof(int);
cout << getArrayLength;
Resultado:
Prof. Juan Mansilla Neyra Pág. 40
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Matrices multidimensionales
Una matriz multidimensional es una matriz de matrices.
Para declarar una matriz multidimensional, defina el tipo de variable,
especifique el nombre de la matriz seguido de corchetes que especifican
cuántos elementos tiene la matriz principal, seguido de otro conjunto de
corchetes que indica cuántos elementos tienen las subarreglas :
string letters[2][4];
Al igual que con las matrices ordinarias, puede insertar valores con un
literal de matriz: una lista separada por comas dentro de llaves. En una
matriz multidimensional, cada elemento de un literal de matriz es otro
literal de matriz.
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
Cada conjunto de corchetes en una declaración de matriz agrega
otra dimensión a una matriz. Se dice que una matriz como la anterior
tiene dos dimensiones.
Las matrices pueden tener cualquier número de dimensiones. Cuantas más
dimensiones tiene una matriz, más complejo se vuelve el código. La
siguiente matriz tiene tres dimensiones:
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
Prof. Juan Mansilla Neyra Pág. 41
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Acceda a los elementos de una matriz
multidimensional
Para acceder a un elemento de una matriz multidimensional, especifique un
número de índice en cada una de las dimensiones de la matriz.
Esta declaración accede al valor del elemento en la primera fila (0) y la
tercera columna (2) de la matriz de letras .
Ejemplo
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
cout << letters[0][2]; // Outputs "C"
Cambiar elementos en una matriz
multidimensional
Para cambiar el valor de un elemento, consulte el número de índice del
elemento en cada una de las dimensiones:
Ejemplo
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
letters[0][0] = "Z";
cout << letters[0][0]; // Now outputs "Z" instead of "A"
Prof. Juan Mansilla Neyra Pág. 42
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Bucle a través de una matriz
multidimensional
Para recorrer una matriz multidimensional, necesita un ciclo para cada una
de las dimensiones de la matriz.
El siguiente ejemplo genera todos los elementos en la matriz de letras :
Ejemplo
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 4; j++) {
cout << letters[i][j] << "\n";
}
}
Este ejemplo muestra cómo recorrer una matriz tridimensional:
Ejemplo
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) {
for(int k = 0; k < 2; k++) {
cout << letters[i][j][k] << "\n";
}
Prof. Juan Mansilla Neyra Pág. 43
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
}
}
¿Por qué arreglos multidimensionales?
Las matrices multidimensionales son excelentes para representar
cuadrículas. Este ejemplo muestra un uso práctico para ellos. En el
siguiente ejemplo, usamos una matriz multidimensional para representar
un pequeño juego de Battleship:
Ejemplo
// We put "1" to indicate there is a ship.
bool ships[4][4] = {
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 1, 0 }
};
// Keep track of how many hits the player has and how many turns they
have played in these variables
int hits = 0;
int numberOfTurns = 0;
// Allow the player to keep going until they have hit all four ships
while (hits < 4) {
int row, column;
cout << "Selecting coordinates\n";
// Ask the player for a row
cout << "Choose a row number between 0 and 3: ";
cin >> row;
// Ask the player for a column
cout << "Choose a column number between 0 and 3: ";
cin >> column;
// Check if a ship exists in those coordinates
if (ships[row][column]) {
Prof. Juan Mansilla Neyra Pág. 44
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
// If the player hit a ship, remove it by setting the value to
zero.
ships[row][column] = 0;
// Increase the hit counter
hits++;
// Tell the player that they have hit a ship and how many ships
are left
cout << "Hit! " << (4-hits) << " left.\n\n";
} else {
// Tell the player that they missed
cout << "Miss\n\n";
}
// Count how many turns the player has taken
numberOfTurns++;
}
cout << "Victory!\n";
cout << "You won in " << numberOfTurns << " turns";
Estructuras C++
Las estructuras (también llamadas estructuras) son una forma de agrupar
varias variables relacionadas en un solo lugar. Cada variable en la
estructura se conoce como un miembro de la estructura.
A diferencia de una matriz , una estructura puede contener muchos tipos
de datos diferentes (int, string, bool, etc.).
Crear una estructura
Para crear una estructura, use la struct palabra clave y declare cada uno de
sus miembros entre llaves.
Prof. Juan Mansilla Neyra Pág. 45
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Después de la declaración, especifique el nombre de la variable de
estructura ( myStructure en el ejemplo a continuación):
struct { // Structure declaration
int myNum; // Member (int variable)
string myString; // Member (string variable)
} myStructure; // Structure variable
Miembros de la estructura de acceso
Para acceder a los miembros de una estructura, use la sintaxis de punto
( .):
Ejemplo
Asigne datos a los miembros de una estructura e imprímalos:
// Create a structure variable called myStructure
struct {
int myNum;
string myString;
} myStructure;
// Assign values to members of myStructure
[Link] = 1;
[Link] = "Hello World!";
// Print members of myStructure
cout << [Link] << "\n";
cout << [Link] << "\n";
Una estructura en múltiples variables
Puede usar una coma ( ,) para usar una estructura en muchas variables:
struct {
int myNum;
string myString;
Prof. Juan Mansilla Neyra Pág. 46
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
} myStruct1, myStruct2, myStruct3; // Multiple structure variables
separated with commas
Este ejemplo muestra cómo usar una estructura en dos variables
diferentes:
Ejemplo
Usa una estructura para representar dos autos:
struct {
string brand;
string model;
int year;
} myCar1, myCar2; // We can add variables by separating them with a
comma here
// Put data into the first structure
[Link] = "BMW";
[Link] = "X5";
[Link] = 1999;
// Put data into the second structure
[Link] = "Ford";
[Link] = "Mustang";
[Link] = 1969;
// Print the structure members
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
Estructuras con nombre
Al darle un nombre a la estructura, puede tratarla como un tipo de
datos. Esto significa que puede crear variables con esta estructura en
cualquier parte del programa en cualquier momento.
Prof. Juan Mansilla Neyra Pág. 47
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Para crear una estructura con nombre, coloque el nombre de la estructura
justo después de la structpalabra clave:
struct myDataType { // This structure is named "myDataType"
int myNum;
string myString;
};
Para declarar una variable que usa la estructura, use el nombre de la
estructura como el tipo de datos de la variable:
myDataType myVar;
Ejemplo
Usa una estructura para representar dos autos:
// Declare a structure named "car"
struct car {
string brand;
string model;
int year;
};
int main() {
// Create a car structure and store it in myCar1;
car myCar1;
[Link] = "BMW";
[Link] = "X5";
[Link] = 1999;
// Create another car structure and store it in myCar2;
car myCar2;
[Link] = "Ford";
[Link] = "Mustang";
[Link] = 1969;
// Print the structure members
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
return 0;
}
Prof. Juan Mansilla Neyra Pág. 48
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Creación de referencias
Una variable de referencia es una "referencia" a una variable existente y se
crea con el &operador:
string food = "Pizza"; // food variable
string &meal = food; // reference to food
Ahora, podemos usar el nombre de la variable food o el nombre meal de
referencia para referirnos a la food variable:
Ejemplo
string food = "Pizza";
string &meal = food;
cout << food << "\n"; // Outputs Pizza
cout << meal << "\n"; // Outputs Pizza
Dirección de memoria
En el ejemplo de la página anterior, el &operador se utilizó para crear una
variable de referencia. Pero también se puede usar para obtener la
dirección de memoria de una variable; que es la ubicación donde se
almacena la variable en la computadora.
Cuando se crea una variable en C++, se asigna una dirección de memoria a
la variable. Y cuando asignamos un valor a la variable, se almacena en esta
dirección de memoria.
Para acceder a él, use el & operador y el resultado representará dónde se
almacena la variable:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 49
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
string food = "Pizza";
cout << &food; // Outputs 0x6dfed4
Nota: La dirección de memoria está en formato hexadecimal (0x..). Tenga
en cuenta que es posible que no obtenga el mismo resultado en su
programa.
¿Y por qué es útil saber la dirección de memoria?
Las referencias y los punteros (sobre los que aprenderá en el próximo
capítulo) son importantes en C++ porque le brindan la capacidad de
manipular los datos en la memoria de la computadora, lo que puede
reducir el código y mejorar el rendimiento .
Estas dos características son una de las cosas que hacen que C++ se
destaque de otros lenguajes de programación, como Python y Java .
Creación de punteros
Aprendiste del capítulo anterior que podemos obtener la dirección de
memoria de una variable usando el & operador:
Ejemplo
string food = "Pizza"; // A food variable of type string
cout << food; // Outputs the value of food (Pizza)
cout << &food; // Outputs the memory address of food (0x6dfed4)
Sin embargo, un puntero es una variable que almacena la dirección de
memoria como su valor .
Una variable de puntero apunta a un tipo de datos (como int o string) del
mismo tipo y se crea con el *operador. La dirección de la variable con la
que está trabajando se asigna al puntero:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 50
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
string food = "Pizza"; // A food variable of type string
string* ptr = &food; // A pointer variable, with the name ptr,
that stores the address of food
// Output the value of food (Pizza)
cout << food << "\n";
// Output the memory address of food (0x6dfed4)
cout << &food << "\n";
// Output the memory address of food with the pointer (0x6dfed4)
cout << ptr << "\n";
Ejemplo explicado
Cree una variable de puntero con el nombre ptr, que apunte a una string
variable, utilizando el signo de asterisco *( string* ptr). Tenga en cuenta
que el tipo del puntero debe coincidir con el tipo de variable con la que está
trabajando.
Use el & operador para almacenar la dirección de memoria de la variable
llamada food y asígnela al puntero.
Ahora, ptr contiene el valor de food la dirección de memoria de .
Sugerencia: hay tres formas de declarar variables de puntero, pero se
prefiere la primera:
string* mystring; // Preferred
string *mystring;
string * mystring;
Obtener dirección de memoria y valor
En el ejemplo de la página anterior, usamos la variable puntero para
obtener la dirección de memoria de una variable (usada junto con
el operador de & referencia ). Sin embargo, también puede usar el
puntero para obtener el valor de la variable, usando el *operador (el
operador de desreferencia ):
Ejemplo
Prof. Juan Mansilla Neyra Pág. 51
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
string food = "Pizza"; // Variable declaration
string* ptr = &food; // Pointer declaration
// Reference: Output the memory address of food with the pointer
(0x6dfed4)
cout << ptr << "\n";
// Dereference: Output the value of food with the pointer (Pizza)
cout << *ptr << "\n";
Tenga en cuenta que el *signo puede ser confuso aquí, ya que hace dos
cosas diferentes en nuestro código:
• Cuando se usa en la declaración (string* ptr), crea una variable de
puntero .
• Cuando no se usa en la declaración, actúa como un operador de
desreferencia .
Modificar el valor del puntero
También puede cambiar el valor del puntero. Pero tenga en cuenta que esto
también cambiará el valor de la variable original:
Ejemplo
string food = "Pizza";
string* ptr = &food;
// Output the value of food (Pizza)
cout << food << "\n";
// Output the memory address of food (0x6dfed4)
cout << &food << "\n";
// Access the memory address of food and output its value (Pizza)
cout << *ptr << "\n";
// Change the value of the pointer
*ptr = "Hamburger";
// Output the new value of the pointer (Hamburger)
Prof. Juan Mansilla Neyra Pág. 52
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
cout << *ptr << "\n";
// Output the new value of the food variable (Hamburger)
cout << food << "\n";
Funciones C++
Una función es un bloque de código que solo se ejecuta cuando se le
llama.
Puede pasar datos, conocidos como parámetros, a una función.
Las funciones se utilizan para realizar ciertas acciones y son importantes
para reutilizar el código: defina el código una vez y utilícelo muchas
veces.
Crear una función
C++ proporciona algunas funciones predefinidas, como main(), que se
utiliza para ejecutar código. Pero también puedes crear tus propias
funciones para realizar determinadas acciones.
Para crear (a menudo denominado declarar ) una función, especifique el
nombre de la función, seguido de paréntesis () :
Sintaxis
void myFunction() {
// code to be executed
}
Ejemplo explicado
• myFunction()es el nombre de la función
• voidsignifica que la función no tiene un valor de retorno. Aprenderá
más sobre los valores devueltos más adelante en el próximo capítulo.
Prof. Juan Mansilla Neyra Pág. 53
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
• dentro de la función (el cuerpo), agregue código que defina lo que
debe hacer la función
Llamar a una función
Las funciones declaradas no se ejecutan inmediatamente. Se "guardan para
su uso posterior" y se ejecutarán más tarde, cuando se llamen.
Para llamar a una función, escriba el nombre de la función seguido de dos
paréntesis () y un punto y coma .;
En el siguiente ejemplo, myFunction()se utiliza para imprimir un texto (la
acción), cuando se llama:
Ejemplo
En el interior main, llame a myFunction():
// Create a function
void myFunction() {
cout << "I just got executed!";
}
int main() {
myFunction(); // call the function
return 0;
}
// Outputs "I just got executed!"
Una función se puede llamar varias veces:
Ejemplo
void myFunction() {
cout << "I just got executed!\n";
}
int main() {
myFunction();
Prof. Juan Mansilla Neyra Pág. 54
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
myFunction();
myFunction();
return 0;
}
// I just got executed!
// I just got executed!
// I just got executed!
Declaración y definición de funciones
Una función de C++ consta de dos partes:
• Declaración: el tipo de devolución, el nombre de la función y los
parámetros (si corresponde)
• Definición: el cuerpo de la función (código a ejecutar)
void myFunction() { // declaration
// the body of the function (definition)
}
Nota: Si una función definida por el usuario, como myFunction()se declara
después de la main()función, se producirá un error :
Ejemplo
int main() {
myFunction();
return 0;
}
void myFunction() {
cout << "I just got executed!";
}
// Error
Sin embargo, es posible separar la declaración y la definición de la función,
para optimizar el código.
Prof. Juan Mansilla Neyra Pág. 55
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
A menudo verá programas C++ que tienen una declaración de función
arriba main()y una definición de función abajo main(). Esto hará que el
código esté mejor organizado y sea más fácil de leer:
Ejemplo
// Function declaration
void myFunction();
// The main method
int main() {
myFunction(); // call the function
return 0;
}
// Function definition
void myFunction() {
cout << "I just got executed!";
}
Parámetros y Argumentos
La información se puede pasar a las funciones como un parámetro. Los
parámetros actúan como variables dentro de la función.
Los parámetros se especifican después del nombre de la función, entre
paréntesis. Puede agregar tantos parámetros como desee, simplemente
sepárelos con una coma:
Sintaxis
void functionName(parameter1, parameter2, parameter3) {
// code to be executed
}
El siguiente ejemplo tiene una función que toma un fname
string llamado como parámetro. Cuando se llama a la función, pasamos un
nombre, que se usa dentro de la función para imprimir el nombre
completo:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 56
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
void myFunction(string fname) {
cout << fname << " Refsnes\n";
}
int main() {
myFunction("Liam");
myFunction("Jenny");
myFunction("Anja");
return 0;
}
// Liam Refsnes
// Jenny Refsnes
// Anja Refsnes
Cuando se pasa un parámetro a la función, se le
llama argumento . Entonces, del ejemplo anterior: fname es
un parámetro Liam, mientras que Jenny y Anja son argumentos .
Valor de parámetro predeterminado
También puede usar un valor de parámetro predeterminado, usando el
signo igual ( =).
Si llamamos a la función sin argumento, utiliza el valor predeterminado
("Noruega"):
Ejemplo
void myFunction(string country = "Norway") {
cout << country << "\n";
}
int main() {
myFunction("Sweden");
myFunction("India");
myFunction();
myFunction("USA");
return 0;
}
// Sweden
Prof. Juan Mansilla Neyra Pág. 57
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
// India
// Norway
// USA
Un parámetro con un valor predeterminado suele denominarse
" parámetro opcional ". Del ejemplo anterior, country es un parámetro
opcional y "Norway" es el valor predeterminado.
Multiple Parameters
Inside the function, you can add as many parameters as you want:
Example
void myFunction(string fname, int age) {
cout << fname << " Refsnes. " << age << " years old. \n";
}
int main() {
myFunction("Liam", 3);
myFunction("Jenny", 14);
myFunction("Anja", 30);
return 0;
}
// Liam Refsnes. 3 years old.
// Jenny Refsnes. 14 years old.
// Anja Refsnes. 30 years old.
Parámetros Múltiples
Dentro de la función, puede agregar tantos parámetros como desee:
Ejemplo
void myFunction(string fname, int age) {
cout << fname << " Refsnes. " << age << " years old. \n";
}
Prof. Juan Mansilla Neyra Pág. 58
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
int main() {
myFunction("Liam", 3);
myFunction("Jenny", 14);
myFunction("Anja", 30);
return 0;
}
// Liam Refsnes. 3 years old.
// Jenny Refsnes. 14 years old.
// Anja Refsnes. 30 years old.
Valores devueltos
La void palabra clave, utilizada en los ejemplos anteriores, indica que la
función no debe devolver un valor. Si desea que la función devuelva un
valor, puede usar un tipo de datos (como int, string, etc.) en lugar de void
y usar la return palabra clave dentro de la función:
Ejemplo
int myFunction(int x) {
return 5 + x;
}
int main() {
cout << myFunction(3);
return 0;
}
// Outputs 8 (5 + 3)
Este ejemplo devuelve la suma de una función con dos parámetros:
Ejemplo
int myFunction(int x, int y) {
return x + y;
}
int main() {
Prof. Juan Mansilla Neyra Pág. 59
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
cout << myFunction(5, 3);
return 0;
}
// Outputs 8 (5 + 3)
También puede almacenar el resultado en una variable:
Ejemplo
int myFunction(int x, int y) {
return x + y;
}
int main() {
int z = myFunction(5, 3);
cout << z;
return 0;
}
// Outputs 8 (5 + 3)
Pasar por referencia
En los ejemplos de la página anterior, usamos variables normales cuando
pasamos parámetros a una función. También puede pasar una referencia a
la función. Esto puede ser útil cuando necesita cambiar el valor de los
argumentos:
Ejemplo
void swapNums(int &x, int &y) {
int z = x;
x = y;
y = z;
}
int main() {
int firstNum = 10;
int secondNum = 20;
cout << "Before swap: " << "\n";
cout << firstNum << secondNum << "\n";
Prof. Juan Mansilla Neyra Pág. 60
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
// Call the function, which will change the values of firstNum and
secondNum
swapNums(firstNum, secondNum);
cout << "After swap: " << "\n";
cout << firstNum << secondNum << "\n";
return 0;
}
Pasar matrices como parámetros de
función
También puede pasar matrices a una función:
Ejemplo
void myFunction(int myNumbers[5]) {
for (int i = 0; i < 5; i++) {
cout << myNumbers[i] << "\n";
}
}
int main() {
int myNumbers[5] = {10, 20, 30, 40, 50};
myFunction(myNumbers);
return 0;
}
Ejemplo explicado
La función ( myFunction) toma una matriz como su parámetro ( int
myNumbers[5]) y recorre los elementos de la matriz con el for bucle.
Cuando se llama a la función inside main(), pasamos la myNumbers matriz, que
genera los elementos de la matriz.
Tenga en cuenta que cuando llama a la función, solo necesita usar el
nombre de la matriz cuando la pasa como
Prof. Juan Mansilla Neyra Pág. 61
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
argumento myFunction(myNumbers). Sin embargo, se necesita la declaración
completa de la matriz en el parámetro de función ( int myNumbers[5]).
Sobrecarga de funciones
Con la sobrecarga de funciones , varias funciones pueden tener el
mismo nombre con diferentes parámetros:
Ejemplo
int myFunction(int x)
float myFunction(float x)
double myFunction(double x, double y)
Considere el siguiente ejemplo, que tiene dos funciones que suman
números de diferente tipo:
Ejemplo
int plusFuncInt(int x, int y) {
return x + y;
}
double plusFuncDouble(double x, double y) {
return x + y;
}
int main() {
int myNum1 = plusFuncInt(8, 5);
double myNum2 = plusFuncDouble(4.3, 6.26);
cout << "Int: " << myNum1 << "\n";
cout << "Double: " << myNum2;
return 0;
}
En lugar de definir dos funciones que deberían hacer lo mismo, es mejor
sobrecargar una.
Prof. Juan Mansilla Neyra Pág. 62
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
En el siguiente ejemplo, sobrecargamos la plusFunc función para que
funcione tanto para como int para double:
Ejemplo
int plusFunc(int x, int y) {
return x + y;
}
double plusFunc(double x, double y) {
return x + y;
}
int main() {
int myNum1 = plusFunc(8, 5);
double myNum2 = plusFunc(4.3, 6.26);
cout << "Int: " << myNum1 << "\n";
cout << "Double: " << myNum2;
return 0;
}
Nota: varias funciones pueden tener el mismo nombre siempre que el
número y/o el tipo de parámetros sean diferentes.
recursividad
La recursividad es la técnica de hacer que una función se llame a sí
misma. Esta técnica proporciona una forma de dividir problemas
complicados en problemas simples que son más fáciles de resolver.
La recursión puede ser un poco difícil de entender. La mejor manera de
averiguar cómo funciona es experimentar con él.
Ejemplo de recursividad
Sumar dos números juntos es fácil de hacer, pero sumar un rango de
números es más complicado. En el siguiente ejemplo, la recursividad se usa
para sumar un rango de números al dividirlo en la simple tarea de sumar
dos números:
Prof. Juan Mansilla Neyra Pág. 63
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Ejemplo
int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
int main() {
int result = sum(10);
cout << result;
return 0;
}
Ejemplo explicado
Cuando sum() se llama a la función, agrega un parámetro k a la suma de
todos los números menores que k y devuelve el resultado. Cuando k se
convierte en 0, la función simplemente devuelve 0. Cuando se ejecuta, el
programa sigue estos pasos:
10 + suma(9)
10 + ( 9 + suma(8) )
10 + ( 9 + ( 8 + suma(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + suma(0)
10 +9+8+7+6+5+4+3+2+1+0
Dado que la función no se llama a sí misma cuando k es 0, el programa se
detiene allí y devuelve el resultado.
El desarrollador debe tener mucho cuidado con la recursividad, ya que
puede ser bastante fácil escribir una función que nunca termina, o una que
usa cantidades excesivas de memoria o potencia del procesador. Sin
embargo, cuando se escribe correctamente, la recursión puede ser un
enfoque de programación muy eficiente y matemáticamente elegante.
Prof. Juan Mansilla Neyra Pág. 64
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Clases C++
C++ ¿Qué es la programación
orientada a objetos?
OOP significa Programación Orientada a Objetos.
La programación procedimental se trata de escribir procedimientos o
funciones que realizan operaciones en los datos, mientras que la
programación orientada a objetos se trata de crear objetos que contienen
tanto datos como funciones.
La programación orientada a objetos tiene varias ventajas sobre la
programación procedimental:
• OOP es más rápido y más fácil de ejecutar
• OOP proporciona una estructura clara para los programas.
• OOP ayuda a mantener el código C++ SECO "No se repita", y hace
que el código sea más fácil de mantener, modificar y depurar
• OOP hace posible crear aplicaciones reutilizables completas con
menos código y un tiempo de desarrollo más corto
Sugerencia: el principio "No se repita" (DRY) se trata de reducir la
repetición del código. Debe extraer los códigos que son comunes para la
aplicación, colocarlos en un solo lugar y reutilizarlos en lugar de repetirlos.
C++ ¿Qué son las clases y los objetos?
Las clases y los objetos son los dos aspectos principales de la programación
orientada a objetos.
Mire la siguiente ilustración para ver la diferencia entre clase y objetos:
Prof. Juan Mansilla Neyra Pág. 65
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Entonces, una clase es una plantilla para objetos y un objeto es una
instancia de una clase.
Cuando se crean los objetos individuales, heredan todas las variables y
funciones de la clase.
Aprenderá mucho más sobre clases y objetos en el próximo capítulo.
Clases/Objetos C++
C++ es un lenguaje de programación orientado a objetos.
Todo en C++ está asociado con clases y objetos, junto con sus atributos y
métodos. Por ejemplo: en la vida real, un automóvil es un objeto. El
automóvil tiene atributos, como el peso y el color, y métodos, como la
conducción y el freno.
Los atributos y métodos son básicamente variables y funciones que
pertenecen a la clase. Estos a menudo se denominan "miembros de la
clase".
Una clase es un tipo de datos definido por el usuario que podemos usar en
nuestro programa y funciona como un constructor de objetos o un
"modelo" para crear objetos.
Prof. Juan Mansilla Neyra Pág. 66
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Crear una clase
Para crear una clase, utilice la class palabra clave:
Ejemplo
Crea una clase llamada " MyClass":
class MyClass { // The class
public: // Access specifier
int myNum; // Attribute (int variable)
string myString; // Attribute (string variable)
};
Ejemplo explicado
• La class palabra clave se usa para crear una clase llamada MyClass.
• La public palabra clave es un especificador de acceso, que
especifica que los miembros (atributos y métodos) de la clase son
accesibles desde fuera de la clase. Aprenderá más sobre los
especificadores de acceso más adelante.
• Dentro de la clase, hay una variable entera myNum y una variable de
cadena myString. Cuando las variables se declaran dentro de una
clase, se denominan atributos.
• Por último, finalice la definición de la clase con un punto y coma ;.
Crear un objeto
En C++, un objeto se crea a partir de una clase. Ya hemos creado la clase
llamada MyClass, por lo que ahora podemos usarla para crear objetos.
Para crear un objeto de MyClass, especifique el nombre de la clase, seguido
del nombre del objeto.
Para acceder a los atributos de clase (myNum y myString), use la sintaxis de
punto ( .) en el objeto:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 67
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Cree un objeto llamado " myObj" y acceda a los atributos:
class MyClass { // The class
public: // Access specifier
int myNum; // Attribute (int variable)
string myString; // Attribute (string variable)
};
int main() {
MyClass myObj; // Create an object of MyClass
// Access attributes and set values
[Link] = 15;
[Link] = "Some text";
// Print attribute values
cout << [Link] << "\n";
cout << [Link];
return 0;
}
Métodos de clase
Los métodos son funciones que pertenecen a la clase.
Hay dos formas de definir funciones que pertenecen a una clase:
• Definición de clase interna
• Definición de clase externa
En el siguiente ejemplo, definimos una función dentro de la clase y la
llamamos " myMethod".
Nota: Accede a los métodos de la misma forma que accede a los
atributos; creando un objeto de la clase y usando la sintaxis de punto ( .):
Ejemplo interior
class MyClass { // The class
public: // Access specifier
void myMethod() { // Method/function defined inside the class
cout << "Hello World!";
}
Prof. Juan Mansilla Neyra Pág. 68
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
};
int main() {
MyClass myObj; // Create an object of MyClass
[Link](); // Call the method
return 0;
}
Para definir una función fuera de la definición de clase, debe declararla
dentro de la clase y luego definirla fuera de la clase. Esto se hace
especificando el nombre de la clase, seguido del ::operador de resolución
de alcance, seguido del nombre de la función:
Ejemplo exterior
class MyClass { // The class
public: // Access specifier
void myMethod(); // Method/function declaration
};
// Method/function definition outside the class
void MyClass::myMethod() {
cout << "Hello World!";
}
int main() {
MyClass myObj; // Create an object of MyClass
[Link](); // Call the method
return 0;
}
Parámetros
También puede agregar parámetros:
Ejemplo
#include <iostream>
using namespace std;
class Car {
public:
Prof. Juan Mansilla Neyra Pág. 69
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
int speed(int maxSpeed);
};
int Car::speed(int maxSpeed) {
return maxSpeed;
}
int main() {
Car myObj; // Create an object of Car
cout << [Link](200); // Call the method with an argument
return 0;
}
Constructores
Un constructor en C++ es un método especial que se llama
automáticamente cuando se crea un objeto de una clase.
Para crear un constructor, use el mismo nombre que la clase, seguido de
paréntesis ():
Ejemplo
class MyClass { // The class
public: // Access specifier
MyClass() { // Constructor
cout << "Hello World!";
}
};
int main() {
MyClass myObj; // Create an object of MyClass (this will call
the constructor)
return 0;
}
Prof. Juan Mansilla Neyra Pág. 70
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Parámetros del constructor
Los constructores también pueden tomar parámetros (al igual que las
funciones normales), que pueden ser útiles para establecer valores iniciales
para los atributos.
La siguiente clase tiene atributos y un constructor con diferentes Brand
parámetros model. Year Dentro del constructor establecemos los atributos
iguales a los parámetros del constructor ( brand=x, etc). Cuando llamamos al
constructor (al crear un objeto de la clase), le pasamos parámetros al
constructor, que establecerá el valor de los atributos correspondientes al
mismo:
Ejemplo
class Car { // The class
public: // Access specifier
string brand; // Attribute
string model; // Attribute
int year; // Attribute
Car(string x, string y, int z) { // Constructor with parameters
brand = x;
model = y;
year = z;
}
};
int main() {
// Create Car objects and call the constructor with different
values
Car carObj1("BMW", "X5", 1999);
Car carObj2("Ford", "Mustang", 1969);
// Print values
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
return 0;
}
Prof. Juan Mansilla Neyra Pág. 71
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Al igual que las funciones, los constructores también se pueden definir
fuera de la clase. Primero, declare el constructor dentro de la clase y luego
defínalo fuera de la clase especificando el nombre de la clase, seguido
del :: operador de resolución de alcance, seguido del nombre del
constructor (que es el mismo que el de la clase):
Ejemplo
class Car { // The class
public: // Access specifier
string brand; // Attribute
string model; // Attribute
int year; // Attribute
Car(string x, string y, int z); // Constructor declaration
};
// Constructor definition outside the class
Car::Car(string x, string y, int z) {
brand = x;
model = y;
year = z;
}
int main() {
// Create Car objects and call the constructor with different
values
Car carObj1("BMW", "X5", 1999);
Car carObj2("Ford", "Mustang", 1969);
// Print values
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
cout << [Link] << " " << [Link] << " " <<
[Link] << "\n";
return 0;
}
Especificadores de acceso
A estas alturas, está bastante familiarizado con la public palabra clave que
aparece en todos nuestros ejemplos de clase:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 72
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
class MyClass { // The class
public: // Access specifier
// class members goes here
};
La public palabra clave es un especificador de acceso. Los
especificadores de acceso definen cómo se puede acceder a los miembros
(atributos y métodos) de una clase. En el ejemplo anterior, los miembros
son public, lo que significa que se puede acceder a ellos y modificarlos
desde fuera del código.
Sin embargo, ¿qué pasa si queremos que los miembros sean privados y
estén ocultos del mundo exterior?
En C++, hay tres especificadores de acceso:
• public- los miembros son accesibles desde fuera de la clase
• private- los miembros no pueden ser accedidos (o vistos) desde
fuera de la clase
• protected- No se puede acceder a los miembros desde fuera de la
clase, sin embargo, se puede acceder a ellos en clases
heredadas. Aprenderá más sobre Herencia más adelante.
En el siguiente ejemplo, demostramos las diferencias entre los
miembros publicy private:
Ejemplo
class MyClass {
public: // Public access specifier
int x; // Public attribute
private: // Private access specifier
int y; // Private attribute
};
int main() {
MyClass myObj;
myObj.x = 25; // Allowed (public)
myObj.y = 50; // Not allowed (private)
return 0;
}
Si intenta acceder a un miembro privado, se produce un error:
Prof. Juan Mansilla Neyra Pág. 73
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
error: y is private
Nota: es posible acceder a miembros privados de una clase utilizando un
método público dentro de la misma clase. Vea el siguiente capítulo
( Encapsulación ) sobre cómo hacer esto.
Sugerencia: se considera una buena práctica declarar los atributos de su
clase como privados (con la mayor frecuencia posible). Esto reducirá la
posibilidad de que usted (u otros) estropeen el código. Este es también el
ingrediente principal del concepto de encapsulación , sobre el que
aprenderá más en el próximo capítulo.
Nota: De forma predeterminada, todos los miembros de una clase
son private, si no especifica un especificador de acceso:
Ejemplo
class MyClass {
int x; // Private attribute
int y; // Private attribute
};
Encapsulación C++
Encapsulación
El significado de Encapsulación es asegurarse de que los datos "sensibles"
estén ocultos para los usuarios. Para lograr esto, debe declarar las
variables/atributos de clase como private (no se puede acceder desde fuera
de la clase). Si desea que otros lean o modifiquen el valor de un miembro
privado, puede proporcionar métodos públicos
de obtención y configuración .
Prof. Juan Mansilla Neyra Pág. 74
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Acceder a miembros privados
Para acceder a un atributo privado, utilice los métodos públicos "get" y
"set":
Ejemplo
#include <iostream>
using namespace std;
class Employee {
private:
// Private attribute
int salary;
public:
// Setter
void setSalary(int s) {
salary = s;
}
// Getter
int getSalary() {
return salary;
}
};
int main() {
Employee myObj;
[Link](50000);
cout << [Link]();
return 0;
}
Ejemplo explicado
El salary atributo es private, que tienen acceso restringido.
El setSalary()método público toma un parámetro ( s) y lo asigna al salary
atributo (salario = s).
El getSalary()método público devuelve el valor del salary atributo privado.
Prof. Juan Mansilla Neyra Pág. 75
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Dentro main(), creamos un objeto de la Employee clase. Ahora podemos usar
el setSalary()método para establecer el valor del atributo privado
en 50000. Luego llamamos al getSalary()método en el objeto para devolver el
valor.
¿Por qué encapsulación?
• Se considera una buena práctica declarar los atributos de su clase
como privados (con la mayor frecuencia posible). La encapsulación
asegura un mejor control de sus datos, porque usted (u otros)
pueden cambiar una parte del código sin afectar otras partes
• Mayor seguridad de los datos
Herencia C++
Herencia
En C++, es posible heredar atributos y métodos de una clase a
otra. Agrupamos el "concepto de herencia" en dos categorías:
• clase derivada (hijo) - la clase que hereda de otra clase
• clase base (padre) - la clase que se hereda de
Para heredar de una clase, use el :símbolo.
En el siguiente ejemplo, la Car clase (hijo) hereda los atributos y métodos
de la Vehicle clase (padre):
Ejemplo
// Base class
class Vehicle {
public:
string brand = "Ford";
void honk() {
Prof. Juan Mansilla Neyra Pág. 76
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
cout << "Tuut, tuut! \n" ;
}
};
// Derived class
class Car: public Vehicle {
public:
string model = "Mustang";
};
int main() {
Car myCar;
[Link]();
cout << [Link] + " " + [Link];
return 0;
}
¿Por qué y cuándo usar "herencia"?
- Es útil para la reutilización de código: reutiliza atributos y métodos de una
clase existente cuando creas una nueva clase.
Herencia multinivel de C++
Herencia multinivel
Una clase también se puede derivar de una clase, que ya se deriva de otra
clase.
En el siguiente ejemplo, MyGrandChild se deriva de class MyChild(que se
deriva de MyClass).
Ejemplo
// Base class (parent)
class MyClass {
public:
Prof. Juan Mansilla Neyra Pág. 77
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
void myFunction() {
cout << "Some content in parent class." ;
}
};
// Derived class (child)
class MyChild: public MyClass {
};
// Derived class (grandchild)
class MyGrandChild: public MyChild {
};
int main() {
MyGrandChild myObj;
[Link]();
return 0;
}
Herencia múltiple
Una clase también se puede derivar de más de una clase base, utilizando
una lista separada por comas:
Ejemplo
// Base class
class MyClass {
public:
void myFunction() {
cout << "Some content in parent class." ;
}
};
// Another base class
class MyOtherClass {
public:
void myOtherFunction() {
cout << "Some content in another class." ;
}
};
Prof. Juan Mansilla Neyra Pág. 78
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
// Derived class
class MyChildClass: public MyClass, public MyOtherClass {
};
int main() {
MyChildClass myObj;
[Link]();
[Link]();
return 0;
}
Acceso a la herencia de C++
Especificadores de acceso
En el capítulo Especificadores de acceso , aprendió que hay tres
especificadores disponibles en C++. Hasta ahora, solo hemos
usado public(los miembros de una clase son accesibles desde fuera de la
clase) y private(solo se puede acceder a los miembros dentro de la
clase). El tercer especificador, protected, es similar a private, pero también
se puede acceder a él en la clase heredada :
Ejemplo
// Base class
class Employee {
protected: // Protected access specifier
int salary;
};
// Derived class
class Programmer: public Employee {
public:
int bonus;
void setSalary(int s) {
salary = s;
}
int getSalary() {
return salary;
}
Prof. Juan Mansilla Neyra Pág. 79
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
};
int main() {
Programmer myObj;
[Link](50000);
[Link] = 15000;
cout << "Salary: " << [Link]() << "\n";
cout << "Bonus: " << [Link] << "\n";
return 0;
}
Polimorfismo de C++
Polimorfismo
Polimorfismo significa "muchas formas", y ocurre cuando tenemos muchas
clases que están relacionadas entre sí por herencia.
Como especificamos en el capítulo anterior; La herencia nos permite
heredar atributos y métodos de otra clase. El polimorfismo usa esos
métodos para realizar diferentes tareas. Esto nos permite realizar una
misma acción de diferentes maneras.
Por ejemplo, piense en una clase base llamada Animal que tiene un método
llamado animalSound(). Las clases derivadas de animales podrían ser cerdos,
gatos, perros, pájaros, y también tienen su propia implementación de un
sonido animal (el cerdo gruñe y el gato maúlla, etc.):
Ejemplo
// Base class
class Animal {
public:
void animalSound() {
cout << "The animal makes a sound \n";
}
};
// Derived class
class Pig : public Animal {
Prof. Juan Mansilla Neyra Pág. 80
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
public:
void animalSound() {
cout << "The pig says: wee wee \n";
}
};
// Derived class
class Dog : public Animal {
public:
void animalSound() {
cout << "The dog says: bow wow \n";
}
};
Recuerde del capítulo Herencia que usamos el :símbolo para heredar de
una clase.
Ahora podemos crear objetos y anular el Pig método : DoganimalSound()
Ejemplo
// Base class
class Animal {
public:
void animalSound() {
cout << "The animal makes a sound \n";
}
};
// Derived class
class Pig : public Animal {
public:
void animalSound() {
cout << "The pig says: wee wee \n";
}
};
// Derived class
class Dog : public Animal {
public:
void animalSound() {
cout << "The dog says: bow wow \n";
}
};
Prof. Juan Mansilla Neyra Pág. 81
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
int main() {
Animal myAnimal;
Pig myPig;
Dog myDog;
[Link]();
[Link]();
[Link]();
return 0;
}
¿Por qué y cuándo usar "herencia" y "polimorfismo"?
- Es útil para la reutilización de código: reutiliza atributos y métodos de una
clase existente cuando creas una nueva clase.
Archivos C++
Archivos C++
La fstream biblioteca nos permite trabajar con archivos.
Para usar la fstream biblioteca, incluya tanto el archivo estándar
como <iostream> el de <fstream> encabezado:
Ejemplo
#include <iostream>
#include <fstream>
Hay tres clases incluidas en la fstream biblioteca, que se utilizan para crear,
escribir o leer archivos:
Class Description
ofstream Creates and writes to files
Prof. Juan Mansilla Neyra Pág. 82
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
ifstream Reads from files
fstream A combination of ofstream and ifstream: creates,
reads, and writes to files
Crear y escribir en un archivo
Para crear un archivo, utilice la clase ofstream o fstream y especifique el
nombre del archivo.
Para escribir en el archivo, utilice el operador de inserción ( <<).
Ejemplo
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// Create and open a text file
ofstream MyFile("[Link]");
// Write to the file
MyFile << "Files can be tricky, but it is fun enough!";
// Close the file
[Link]();
}
¿Por qué cerramos el archivo?
Se considera una buena práctica y puede limpiar espacio de memoria
innecesario.
Prof. Juan Mansilla Neyra Pág. 83
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Excepciones de C++
Excepciones de C++
Al ejecutar código C++, pueden ocurrir diferentes errores: errores de
codificación por parte del programador, errores debido a una entrada
incorrecta u otros imprevistos.
Cuando ocurre un error, C++ normalmente se detendrá y generará un
mensaje de error. El término técnico para esto es: C++ lanzará
una excepción (arrojará un error).
C++ prueba y atrapa
El manejo de excepciones en C++ consta de tres palabras clave: try, throw
y catch:
La try declaración le permite definir un bloque de código para probar
errores mientras se ejecuta.
La throw palabra clave genera una excepción cuando se detecta un
problema, lo que nos permite crear un error personalizado.
La catch instrucción le permite definir un bloque de código que se ejecutará
si ocurre un error en el bloque de prueba.
Las palabras clave try y catch vienen en pares:
Ejemplo
try {
// Block of code to try
throw exception; // Throw an exception when a problem arise
}
catch () {
// Block of code to handle errors
}
Prof. Juan Mansilla Neyra Pág. 84
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
Considere el siguiente ejemplo:
Ejemplo
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw (age);
}
}
catch (int myNum) {
cout << "Access denied - You must be at least 18 years old.\n";
cout << "Age is: " << myNum;
}
Ejemplo explicado
Usamos el try bloque para probar algún código: si la age variable es menor
que 18, haremos throw una excepción y la manejaremos en nuestro catch
bloque.
En el catch bloque, detectamos el error y hacemos algo al
respecto. La catch declaración toma un parámetro : en nuestro ejemplo
usamos una int variable ( myNum) (porque estamos lanzando una excepción
de int tipo en el try bloque ( age)), para generar el valor de age.
Si no se produce ningún error (por ejemplo, si age es 20 en lugar de 15, lo
que significa que será mayor que 18), el catch bloque se salta:
Ejemplo
int age = 20;
También puede usar la throw palabra clave para generar un número de
referencia, como un número/código de error personalizado para fines de
organización:
Ejemplo
Prof. Juan Mansilla Neyra Pág. 85
CPA - PROGRAMMING ESSENTIALS IN C++ (CISCO)
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (int myNum) {
cout << "Access denied - You must be at least 18 years old.\n";
cout << "Error number: " << myNum;
}
Manejar cualquier tipo de excepciones
(...)
Si no conoce el throw tipo utilizado en el try bloque, puede usar la sintaxis
de "tres puntos" ( ...) dentro del catch bloque, que manejará cualquier tipo
de excepción:
Ejemplo
try {
int age = 15;
if (age >= 18) {
cout << "Access granted - you are old enough.";
} else {
throw 505;
}
}
catch (...) {
cout << "Access denied - You must be at least 18 years old.\n";
}
Prof. Juan Mansilla Neyra Pág. 86