Fundamentos del Lenguaje C++
Fundamentos del Lenguaje C++
El lenguaje C++ es uno de los lenguajes más exitosos y utilizados actualmente. Muchos otros
lenguajes como Java, C#, Objective C están basados en su sintaxis y potencia. C++ es un
lenguaje de programación basado en el lenguaje C, originalmente desarrollado por
Dennis Ritchie entre 1969 y 1972 en los Laboratorios Bell. C++ es un lenguaje de
programación diseñado por Bjarne Stroustrup con la intención de añadirle a C la
programación orientada a objetos. Este curso está orientado a los programadores que deseen
introducirse en los principios del lenguaje C++. Nuestros objetivos son:
Para tomar este curso debes tener una computadora con Windows 7 o superior, conexión a
internet y un editor de código como SublimeText, Brackets, Dreamweaver, etc.
● Aprender los tipos de datos y el uso de variables en C++
● Crear diferentes tipos de expresiones utilizando operadores, operandos y literales.
● Aprender las diferentes estructuras condicionales dentro del lenguaje C++
● Aplicar las estructura cíclica como do..while, while y for, así como el operador condicional.
● Aprender a crear, llamar y pasar parámetros por valor o por referencia.
● Aprender las funciones estándar de las librerías ANSI C
● Aprender a crear y poblar estructuras y a utilizar los apuntadores en el Lenguaje C++
● Crear y modificar los apuntadores o punteros en el lenguaje C++
● Crear las clases y sus constructores en la programación orientada a objetos en el lenguaje C++
● Poder crear funciones amigas, funciones amigas en otras clases, crear clases amigas, crear y usar getters y
setters, crear funciones en línea, funciones constantes.
● Crear clases derivadas con constructores, crear destructores de la jerarquía de clases, funciones que se
relacionen entre clases heredadas, sobreescribir funciones en las clases heredadas.
● Crear funciones y clases por medio de plantillas.
Para tomar este curso debes tener una computadora con Windows 7 o superior, conexión a
internet y un editor de código como SublimeText, Brackets, Dreamweaver, etc.
Introducción a C++
Los fundamentos del lenguaje
Capítulo 1: Introducción a C++
Objetivo: El alumno aprenderá los tipos de datos y el uso de variables en C++
Introducción:
El lenguaje C++ es uno de los más poderosos y más utilizados para el desarrollo de
aplicaciones de todo tipo.
Introducción a C++
1 //[Link]
2 #include <iostream>
3 using namespace std;
4 int main(){
5 cout<< "Hola mundo" <<endl;
6 return 0;
7 }
Listado 1.2.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4 int main(){
5 cout<< "Hola mundo" <<endl;
6 return 0;
7 }
Listado 1.3.1. [Link]
1 //[Link]
2 #include <iostream>
3
4 int main(){
5 std::cout<< "Escribe dos numeros" << std::endl;
6 int n1,n2;
7 std::cin >>n1 >> n2;
8 std::cout<< "la suma es " << n1 << "+" <<n2
9 << "es" << n1+n2 <<std:: endl;
10 return 0;
11 }
Listado 1.4.1. [Link]
1 //Espacios de [Link]
2 #include <iostream>
3 using namespace std;
4 int main(){
5 cout<< "Escribe dos numeros" << endl;
6 int n1,n2;
7 cin >>n1 >> n2;
8 cout<< "la suma es " << n1 << "+" <<n2
9 << " es " << n1+n2 << endl;
10 return 0;
11 }
Listado 1.5.1. [Link]
1 //tipos de [Link]
2 #include <iostream>
3 using namespace std;
4 int main(){
5 int n1;
6 double area;
7 float superficie;
8 char letra;
9 //Enteros
10 cout<< "Los bytes de un numero entero son "
11 << sizeof(n1) << endl;
12 //Dobles
13 cout<< "Los bytes de un numero doble son "
14 << sizeof(area) << endl;
15 //Char
16 cout<< "Los bytes de tipo char son "
17 << sizeof(letra) << endl;
18 //Float
1 //tipos de [Link]
2 #include <iostream>
3 using namespace std;
4 int main(){
5 int entero;
6 double doble;
7 float flotante;
8 long double longDouble;
9 //Enetero
10 cout<< "Los bytes de un numero entero son "
11 << sizeof(entero) << endl;
12 //Double
13 cout<< "Los bytes de un numero doble son "
14 << sizeof(doble) << endl;
15 //Float
16 cout<< "Los bytes de un numero float son "
17 << sizeof(flotante) << endl;
18 //Long
19 cout<< "Los bytes de un numero long double "
20 << sizeof(longDouble) << endl;
21 //
22 return 0;
23 }
Listado 1.7.1. [Link]
Coma flotante
● 1.34e-3F //Notación científica
● 1.3456 //Simple precisión f o F
● 003f //Simple precisión
● 1E-3F //Simple precisión
● 1.2345E1L //Largo
Literales caracter
● ‘a’, ‘b’, ‘c’
Literales lógicas
● true, false
Literales de cadenas
● “Hola, cara de bola”
● “”
● ‘c’
● “c”
Cadenas concatenadas
Se utiliza un espacio, un tabulador o una salto de línea
1 //[Link]
2 #include <iostream>
3 using namespace std;
4 int main(){
5 cout << "Hola a todos"
6 " desde el maravilloso mundo"
7 " de C++"
8 << endl;
9 return 0;
10 }
Listado 1.8.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4 #define DIAS 7
5 int main(){
6 const int MESES=12;
7 cout << "Tenemos " << MESES
8 << " meses y cada semana tiene "
9 << DIAS << " dias" << endl;
10 //DIAS = 11; **error*
11 return 0;
12 }
Listado 1.10.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a = 10;
7 int& ptr = a;
8
9 ptr = 100;
10
11 //ptr = &a; // no se utiliza en las referencias
12
13 //*ptr = 100;
14
15 cout << ptr << "," << a << endl;
16
17 return 0;
18 }
Listado 1.11.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 typedef unsigned int entero;
7 typedef float decimal;
8 entero edad = 99;
9 decimal ingreso = 1000.50;
10 cout << "La edad maxima para entrar al sistema es de "
11 << edad << " anios" << endl;
12 return 0;
13 }
Listado 1.12.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 enum DIAS {LUNES=10, MARTES=20,
7 MIERCOLES=30, JUEVES=40,
8 VIERNES=99};
9 //
10 cout << "El dia de hoy es " << VIERNES << endl;
11 //
12 return 0;
13 }
Listado 1.13.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int edades[10];
7 int puntos[3][2] = {
8 {10,20},
9 {30,40},
10 {50,60}
11 };
12 edades[0] = 99;
13 edades[9] = edades[0]-9;
14 //
15 cout << "El primer elementos del arreglo es " << edades[0]
16 << " y el ultimo elemento es " << edades[9] << endl;
17 //
18 cout << "El primer punto cartesiano es "
19 << puntos[0][0] << ", "
20 << puntos[0][1] << endl;
21 //
22 return 0;
23 }
Listado 1.14.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 char a = 'a';
7 char b = 'B';
8 //
9 cout << "Si a la letra '" << a
10 << "' le restas 32 te dara la letra "
11 << (char) (a-32) << endl;
12 //
13 cout << "Si a la letra '" << b
14 << "' le sumas 32 te dara la letra "
15 << (char) (b+32) << endl;
16 //
17 return 0;
18 }
Listado 1.15.1. [Link]
1 //[Link]
2 #include <iostream>
3 #include <string>
4 using namespace std;
5
6 int main(){
7 string nombre = "Pedro";
8 string apellido = "Picapiedra";
9 string puesto = "Operador";
10 //
11 cout << "Tu nombre es " << apellido << ", " << nombre << endl
12 << "y tu puesto es de " << puesto << " de dinsuarios" << endl;
13 //
14 return 0;
15 }
Listado 1.16.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 bool verdadero = 5555;
7 bool falso = false;
8 //
9 cout << "El valor verdadero es: " << verdadero
10 << " y el valor falso es " << falso << endl;
11 //
12 return 0;
13 }
Listado 1.17.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int entero; //declaracion
7 entero = 10; //iniciacion
8 float distancia = 10.34; //declaracion e iniciacion
9 char a,b,c,d,e; //declarando varias variables
10 char f='f', g='g', h='h'; //declaramos e iniciamos variables
11 //
12 string apellidoPaterno = "picapiedra";
13 string apellido_materno = "de rocadura";
14 //
15 return 0;
16 }
Listado 1.18.1. [Link]
Introducción:
Un punto fundamental en cualquier lenguaje de programación son las expresiones que nos
permitirán procesar la información de entrada, tanto del teclado como de los archivos de
datos. En este capítulo estudiaremos los siguientes operadores:
● Aritméticos
● Relacionales
● Lógicos
● Asignación
● Incremento y decremento
● Operador condicional
● Operador sizeof()
● Operador coma
Introducción a C++
1 //operadores [Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a=10, b=20, c=5, r;
7
8 r = a + 10 * b - c;
9 cout << "El resultado es " << r << endl;
10 r = (a + 10) * b - c;
11 cout << "El resultado es " << r << endl;
12 r = (a + 10) * (b - c);
13 cout << "El resultado es " << r << endl;
14 return 0;
15 }
Listado 2.1.1. [Link]
1 //operadores [Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a, b, c;
7 a = 10;
8 b = 20;
9 c = b;
10
11 cout << "A es mayor que B " << (a>b) << endl;
12 cout << "A es menor que B " << (a<b) << endl;
13 cout << "A es igual que B " << (a==b) << endl;
14 cout << "A es diferente que B " << (a!=b) << endl;
15
16 cout << "C es mayor que B " << (c>b) << endl;
17 cout << "C es menor que B " << (c<b) << endl;
18 cout << "C es igual que B " << (c==b) << endl;
19 cout << "C es diferente que B " << (c!=b) << endl;
20
21 return 0;
22 }
Listado 2.2.1. [Link]
1 //operadores asignació[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a,b,c; //Declaracion
7 a = b = c = 20; //Asignacion
8 //
9 cout << "Las variables tienen en valor de "
10 << a << ", "
11 << b << ", "
12 << c << endl;
13 /* los atajos */
14 a*=10; // a = a * 10
15 b+=20; // b = b + 20
16 c-=10; // c = c - 10
17 cout << "Las variables tienen en valor de "
18 << a << ", "
19 << b << ", "
20 << c << endl;
21 a/=10; // a = a / 10
22 b%=3; // b = b % 3
23 cout << "Las variables tienen en valor de "
24 << a << ", "
25 << b << ", "
26 << c << endl;
27 return 0;
28 }
Listado 2.3.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a = 10, b = 20, c;
7 cout << "a=" << a <<" b=" << b << endl;
8 //prefijo
9 ++a;
10 --b;
11 cout << "a=" << a <<" b=" << b << endl;
12 //sufijo
13 a++;
14 b--;
15 cout << "a=" << a <<" b=" << b << endl << endl;
16 // con asignacion y prefijo
17 c = ++a;
18 cout << "a=" << a <<" c=" << c << endl;
19 // con asignacion y sufijo
20 c = a++;
21 cout << "a=" << a <<" c=" << c << endl;
22 //prefijo
23 cout << "a=" << ++a << endl;
24 //sufijo
25 cout << "a=" << a++ << endl;
26 cout << "a=" << a << endl;
27 return 0;
28 }
Listado 2.4.1. [Link]
● El operador ! tiene mayor prioridad que &&, y a su vez, && tiene mayor prioridad que ||.
● Los operadores matemáticos (+,-,/,*,%) tienen precedencia sobre los operadores relacionales (<,>,==,!=).
● Los operadores relacionales tienen prioridad sobre los operadores lógicos (&&,||,!).
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int ventas, comision, retardos;
7 ventas = 200;
8 retardos = 0;
9 comision = (ventas>100 && retardos <=1)? 80 : 0;
10 cout << "Tu comision por " << ventas
11 << " ventas y " << retardos
12 << " es de " << comision << endl;
13 return 0;
14 }
Listado 2.6.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a = 10, b = 20, c;
7 a++, b--;
8 cout << "Valores de a=" << a << " y de b="
9 << b << endl;
10 c = (a+=3, b-=4);
11 cout << "El valor de c es de " << c << endl;
12 c = (a+=3, a=b, a++);
13 cout << "El valor de c es de " << c
14 << " y el valor de a es " << a << endl;
15 return 0;
16 }
Listado 2.7.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a,b,c,d;
7 //
8 a = 0xd3; //211, 11010011
9 b = 0xf5; //245, 11110101
10 c = 0x1e; //30, 00011110
11 //
12 d = b & c; //11110101 & 00011110 => 00010100
13 cout << "El resultado de b&c es " << d << endl;
14 d = a | b; //11010011 & 11110101 => 11110111
15 cout << "El resultado de b&c es " << d << endl;
16 d = a ^ c; //11010011 ^ 00011110 => 11001101
17 cout << "El resultado de b&c es " << d << endl;
18 return 0;
19 }
Listado 2.8.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int a;
7 char b;
8 long c;
9 float d;
10 bool e;
11 double f;
12 cout << "El tamanio de bytes del tipo 'int' es de: "
13 << sizeof(a) << endl;
14 cout << "El tamanio de bytes del tipo 'char' es de: "
15 << sizeof(b) << endl;
16 cout << "El tamanio de bytes del tipo 'long' es de: "
17 << sizeof(c) << endl;
18 cout << "El tamanio de bytes del tipo 'float' es de: "
19 <<sizeof(d) << endl;
20 cout << "El tamanio de bytes del tipo 'bool' es de: "
21 << sizeof(e) << endl;
22 cout << "El tamanio de bytes del tipo 'double' es de: "
23 << sizeof(f) << endl;
24 return 0;
25 }
Listado 2.9.1. [Link]
(tipoDato) valor
tipoDato (valor)
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 //conversion explicita
7 int a = 10, b = 3;
8 float c;
9
10 c = (float) 10/3;
11 cout << "La division de " << a << " entre "
12 << b << " es de " << c << endl;
13 return 0;
14 }
Listado 2.10.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 //conversion implicita
7 short corto;
8 int entero, resultado;
9 float flotante;
10 long largo;
11 double doble;
12
13 corto = 10;
14 entero = 20;
15 flotante = 30.33;
16 largo = 40.44;
17 doble = 50.55;
18 resultado = doble * largo;
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 //declarando y asignando
7 int* ptrEntero = new int(10);
8 char* ptrChar = new char[100];
9 //
10 int* ptrEntero2;
11 ptrEntero2 = new int[100];
12 //
13 delete ptrEntero2, ptrEntero, ptrChar;
14 return 0;
15 }
Listado 2.11.1. [Link]
Introducción:
3.1. La sentencia if
● La sentencia if tiene la condición entre paréntesis y las sentencias entre llaves.
● Si sólo hay una sentencia, podemos omitir las llaves.
● Si la condicional se evalúa como verdadera (diferente a cero) se ejecuta el bloque de sentencias.
● Si la condición es falsa (igual a cero) no se ejecuta el bloque de sentencias y continúa el programa.
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int n, num;
7 num = 5;
8 cout << "Adivina un numero entre 1 y 10" << endl;
9 cin >> n;
10 if (n==num) cout << "Muy bien, adivinaste el numero" << endl;
11 //
12 if (num>n) cout <<
13 "El numero magico es mayor al numero que escribiste"
14 << endl;
15 //
16 if (num<n) cout <<
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int num;
7 cout << "Escribe un numero entero" << endl;
8 cin >> num;
9 if(num%2){
10 cout << "El numero " << num << " es impar" << endl;
11 } else {
12 cout << "El numero " << num << " es par" << endl;
13 }
14 return 0;
15 }
Listado 3.2.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int n, num;
7 n = 5;
8 //
9 cout << "Adivina el numero entre 1 y 10" << endl;
10 cin >> num;
11 if (num==n){
12 cout << "Adivinaste el numero magico" << endl;
13 } else {
14 cout <<
15 "Segunda oportunidad: adivina el numero entre 1 y 10"
16 << endl;
17 cin >> num;
18 if (num==n){
19 cout << "Adivinaste el numero magico" << endl;
20 } else {
21 cout <<
22 "Tercera oportunidad: adivina el numero entre 1 y 10" << endl;
23 cin >> num;
24 if (num==n){
25 cout <<
26 "Adivinaste el numero magico en el tercer intento" << endl;
27 } else {
28 cout << "Eres muy mal adivinador el numero era " << n << endl;
29 }// tercera oportunidad
30 } // segunda oportunidad
31 } // primera oportunidad
32 return 0;
33 }
Listado 3.3.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int edad;
7
8 cout << "Escribe tu edad" << endl;
9 cin >> edad;
10
11 if(edad<18)
12 cout << "Lo sentimos, no tienens edad para entrar a la pagina";
13 else if(edad<30)
14 cout << "Bienvenido a la pagina";
15 else if(edad<50)
16 cout << "Bienvenido, pero debeías pensarlo bien antes de entrar a la pagina";
17 else if(edad<60)
18 cout << "Puedes entrar a la pagina bajo tu responsabilidad";
19 else
20 cout << "Lo sentimos, sobrepasas la edad para entrar a la pagina";
21 cout << " tu edad es de " << edad << endl;
22 return 0;
23 }
Listado 3.4.1. [Link]
switch (selector){
case valor: sentencias;
break;
case valor: sentencias;
break;
case valor: sentencias;
break;
…
default: sentencias;
}
● Cada valor debe de ser único.
● Si no se cumple ningún valor se ejecuta la sentencia default.
● Si se cumple un valor, se ejecutan las sentencias hasta encontrar una sentencia break.
● Los valores de la estructura case deben ser del mismo tipo que el selector.
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int dia;
7
8 cout << "Dia de la semana (1=domingo... 7=sabado)" << endl;
9 cin >> dia;
10
11 switch(dia){
12 case 1: cout << "Hoy es domingo" << endl;
13 break;
14 case 2: cout << "Hoy es lunes" << endl;
15 break;
16 case 3: cout << "Hoy es martes" << endl;
17 break;
18 case 4: cout << "Hoy es miercoles" << endl;
19 break;
20 case 5: cout << "Hoy es jueves" << endl;
21 break;
22 case 6: cout << "Hoy es viernes" << endl;
23 break;
24 case 7: cout << "Hoy es sabado" << endl;
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int estado;
7
8 cout << "1. Soltero" << endl;
9 cout << "2. Casado" << endl;
10 cout << "3. Union libre" << endl;
11 cout << "4. Arrejuntado" << endl;
12 cout << "5. Es complicado" << endl;
13 cin >> estado;
14
15 switch(estado){
16 case 1:
17 case 5:
18 cout << "Felicidades, eres soltero" << endl;
19 break;
20 case 2:
21 case 3:
22 case 4:
23 cout << "Felicidades, eres casado" << endl;
24 break;
25 default: cout << "Ese estado no existe" << endl;
26 }
27 return 0;
28 }
Listado 3.5.2. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int precio, tipoCambio,total;
7 cout << "Teclee el valor del producto" << endl;
8 cin >> precio;
9
10 cout << "Teclee el tipo de cambio (0 si no hay tc)"
11 << endl;
12 cin >> tipoCambio;
13
14 total = (tipoCambio==0)? precio : precio * tipoCambio;
15 cout << "El precio total del producto es " << total;
16
17 (tipoCambio==0)? cout << " moneda nacional" :
18 cout << " al tipo de cambio de " << tipoCambio;
19
20 return 0;
21 }
Listado 3.6.1. [Link]
Introducción:
1 //[Link]
2 #include <iostream>
3 using namespace std;
4 int main(){
5 int i=0; //variable de control
6 while(i<10){
7 cout << "El valor de i es " << i << endl;
8 i++; //incremento
9 }
10 cout << "El valor de i despues del ciclo es " << i << endl;
11 return 0;
12 }
Listado 4.1.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int n, num, op, i;
7 n = 5;
8 op = 3;
9 i = 1;
10
11 do{
12 cout << "Adivina el numero magico entre 1 y 10, optunidad "
13 << i << " de " << op << endl;
14 cin >> num;
15 if(num==n){
16 cout << "Muy bien, adivinaste el numero magico" << endl;
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int i,j;
7
8 for(i=0; i<10; i++){
9 cout << "El valor de i es " << i << endl;
10 }
11 cout << "El valor de i saliendo del ciclo es "
12 << i << endl;
13 cout << "---------------------" << endl;
14 for(i=0, j=100; i<10; i++, j-=10){
15 cout << "El valor de i es " << i
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int n, num;
7 n=5;
8 cout <<
9 "Adivina el numero magico entre 1 y 10" << endl;
10
11 while(cin >> num){
12 if(num==n) break;
13 cout <<
14 "Ese no es el numero magico, intenta nuevamente"
15 << endl;
16 }
17 cout << "Muy bien, 5 es el numero magico" << endl;
18 return 0;
19 }
Listado 4.4.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int i;
7 for(i=0; i<=100; i++){
8 if(i%5!=0) continue;
9 cout << "Multiplo de 5 es " << i << endl;
10 }
11 return 0;
12 }
Listado 4.4.2. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int lineas, fila, blancos, cruces;
7 char blanco = ' ';
8 char cruz = '*';
9
10 lineas = 10;
11 for(fila=1; fila<lineas; fila++){
12 for(blancos = lineas-fila; blancos > 0; blancos--)
13 cout << blanco;
14 for(cruces=1; cruces < 2 * fila; cruces++)
15 cout << cruz;
16 cout << endl;
17 }
18
19 return 0;
20 }
Listado 4.5.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 enum dias{LUNES, MARTES, MIERCOLES,
7 JUEVES, VIERNES, SABADO, DOMINGO};
8 int dia;
9
10 for(dia=LUNES; dia<=DOMINGO; dia++)
11 cout << dia << endl;
12
13 return 0;
14 }
Listado 4.6.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4
5 int main(){
6 int i;
7
8 //for(i=0; i<10; cout << i++ << endl);
9 i=0;
10 for(;;){
11 cout << i << endl;
12 if(i==10) break;
13 i++;
14 }
15 cout << "Valor de i despues del ciclo "
16 << i << endl;
17 return 0;
18 }
Listado 4.6.2. [Link]
Introducción:
Las funciones creadas por el usuario nos servirán para no repetir código, pero también para
organizar nuestro código. Es como el dilema “¿Cómo te comerías un elefante?”. La respuesta
lógica es “pues poco a poco”. Así, grandes problemas los podemos resolver si lo podemos
resolver cualquier problema si lo dividimos en pequeños problemas y encontrarle solución.
Así que podemos dividir en pequeños problemas llamadas “funciones” y a cada función
encontrarle una solución.
Introducción a C++
1 //[Link]
2 #include <iostream>
3 using namespace std;
4 /** prototipos **/
5 int suma(int, int);
6 int main(){
7 int n1, n2, r;
8 n1 = 7; n2 = 8;
9 r = suma(n1,n2);
10 cout << "La suma de " << n1 << " mas "
11 << n2 << " es de " << r << endl;
12 //llamar a una función
13 cout << "La suma de 5 mas 3 es de " << suma(5,3) << endl;
14 return 0;
15 }
16 int suma(int num1, int num2){
17 return num1+num2;
18 }
Listado 5.1.1. [Link]
1 //[Link]
2 #include <iostream>
3 using namespace std;
4 /** prototipos **/
5 float rectangulo(float, float);
6 float numero();
7 int main()
8 {
9 float base, altura;
10
11 cout << "Escribe la base del rectangulo" << endl;
12 base = numero();
13 cout << "Escribe la altura del rectangulo" << endl;
14 altura = numero();
15 cout << "El area de un rectangulo con base de "
16 << base << endl;
17 cout << "y una altura de " << altura << endl;
18 cout << "es de " << rectangulo(base,altura) << endl;
19
20 return 0;
21 }
22 float numero(){
23 float n;
24 do{
25 cin >> n;
26 }while(n<=0);
27 return n;
28 }
29 float rectangulo(float base, float altura){
30 return base * altura;
31 }
32
Listado 5.2.1. [Link]
1 #include <iostream>
2 #include <cstdarg>
3 using namespace std;
4 /*
5 Funciones - Parámetros no definidos
6 */
7 /*** prototipos ***/
8 void maximo(int n, ...);
9 int main()
10 {
11 cout << "Primera lista" << endl;
12 maximo(5, 9.4, 26.26, 17.17, 12.77, 25.90);
13 cout << "Segunda lista" << endl;
14 maximo(8, 9.4, 126.26, 7.17, 112.77, 225.90,
15 90.90, 123.45, 54.321);
16
17 return 0;
18 }
19 void maximo(int n, ...){
20 double max, act;
21 int i;
22
23 //definir el apuntador
24 va_list puntero;
25 //Iniciamos la lista
26 va_start(puntero,n);
27
28 //Iniciamos primer valor
29 max = act = va_arg(puntero, double);
30 cout << "Valor actual " << act << endl;
31
32 for(i=2; i <=n; i++){
33 //leemos el siguiente valor de la lista
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones - Parámetros por valor o por referencia
5 */
6 /*** Prototipos ***/
7 void funcion1(double x, double y);
8 void funcion2(double &x, double &y);
9 int main()
10 {
11 double x,y;
12
13 x= 5.6; y = 7.5;
14 cout << "x = " << x << ", y = " << y << endl;
15 funcion1(x,y);
16 cout << "x = " << x << ", y = " << y << endl;
17 funcion2(x,y);
18 cout << "x = " << x << ", y = " << y << endl;
19 return 0;
20 }
21 //Pasamos por valor
22 void funcion1(double x, double y){
23 x *= x;
24 y *= y;
25 }
26 //Pasamos por referencia
27 void funcion2(double &x, double &y){
28 x *= x;
29 y *= y;
30 }
31
32
Listado 5.4.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones - Funciones en linea
5 */
6 inline int mayor(int a, int b){
7 return (a>b)? a : b;
8 }
9 int main() {
10 cout << "El valor mayor entre 8 y 10 es "
11 << mayor(8,10) << endl;
12 cout << "El valor mayor entre 88 y 190 es "
13 << mayor(88,190) << endl;
14 cout << "El valor mayor entre 18 y 10 es "
15 << mayor(18,10) << endl;
16 return 0;
17 }
Listado 5.5.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones - Argumentos por omisión
5 */
6 int suma(int a=5, int b=10, int c=20);
7 int main() {
8 cout << "La suma de 5+10+20 es " << suma() << endl;
9 cout << "La suma de 7+10+20 es " << suma(7) << endl;
10 cout << "La suma de 7+8+20 es " << suma(7,8) << endl;
11 cout << "La suma de 7+8+9 es " << suma(7,8,9) << endl;
12 return 0;
13 }
14 int suma(int a, int b, int c){
15 return a + b + c;
16 }
Listado 5.6.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones - Argumentos apuntador
5 */
6 void funcion(int *ptr);
7 int main() {
8 int a;
9 int *ptr;
10
11 a = 100;
12 ptr = &a;
13 funcion(ptr);
14 cout << "a=" << a << endl;
15 cout << "ptr=" << *ptr << endl;
16 //Referencia
17 funcion(&a);
18 cout << "a=" << a << endl;
19 cout << "ptr=" << *ptr << endl;
20
21 return 0;
22 }
23 void funcion(int *ptr){
24 *ptr+=10;
25 }
26
Listado 5.7.1. [Link]
1 #include <iostream>
2 using namespace std;
3 #define N 10
4 void funcion(int [], int);
5 int main() {
6 int arreglo[N] = {1,2,3,4,5,6,7,8,9,0};
7 funcion(arreglo,N);
8 return 0;
9 }
10 void funcion(int a[], int n){
11 for(int i=0; i<n; i++) cout << a[i] << " ";
12 cout << endl;
13 }
Listado 5.8.1. [Link]
1 #include <iostream>
2 using namespace std;
3 #define COL 3
4 #define REN 3
5 void mostrarTabla(int [][COL],int, int);
6 int main() {
7 int tabla[REN][COL] = {{1,2,3},{4,5,6},{7,8,9}};
8 mostrarTabla(tabla,REN,COL);
9 return 0;
10 }
11 void mostrarTabla(int a[][COL],int ren, int col){
12 for(int i=0; i<ren; i++){
13 for (int j = 0; j < col; j++){
14 cout << a[i][j] << " ";
15 }
16 cout << endl;
17 }
18 }
Listado 5.9.1. [Link]
<tipoDato> &<nombreFuncion>(<parámetros>);
1 #include <iostream>
2 using namespace std;
3 /*** Prototipo referencia***/
4 int &funcion(int*,int);
5 int main() {
6 int arreglo[10] = {0,1,2,3,4,5,6,7,8,9};
7
8 funcion(arreglo,5)++;
9 cout << arreglo[5] << endl;
10
11 funcion(arreglo,8) = funcion(arreglo,2)+10;
12 cout << arreglo[8] << endl;
13 return 0;
14 }
15 int &funcion(int* a, int i){
16 return a[i];
17 }
Listado 5.10.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*** Prototipo referencia***/
4 long fibonacci(int);
5 int main () {
6 int n,k;
7
8 do{
9 cout << "Cuantos numeros de Fibonacci deseas:" << endl;
10 cin >> n;
11 }while(n<=1);
12
13 cout << "Numeros de Fibonacci:" << endl;
14 cout << "0 1 ";
15 for(k=2; k<=n; k++)
16 cout << fibonacci(k) << " ";
17
18 return(0);
19 }
20 long fibonacci(int n){
21 //0 1 1 2 3 5 8 13 ...
22 if(n==0 || n==1){
23 return n;
24 } else {
25 return fibonacci(n-2) + fibonacci(n-1);
26 }
27 }
Listado 5.11.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*** Prototipo referencia***/
4 long fibonacci(int);
5 int main (int argc, char *argv[]) {
6 int n,k;
7
8 if(argc==1){
9 n = 10;
10 } else {
11 n = atoi(argv[1]);
12 }
13
14 if(n<=2 || n>100){
15 cout << "Numero fuera de rango " << n << endl;
16 return 1;
17 }
18
19 cout << "Los primeros "<< n <<
20 " numeros de la serie de Fibonacci:" << endl;
21 cout << "0 1 ";
22 for(k=2; k<=n; k++)
23 cout << fibonacci(k) << " ";
24
25 return(0);
26 }
27 long fibonacci(int n){
28 //0 1 1 2 3 5 8 13 ...
29 if(n==0 || n==1){
30 return n;
31 } else {
32 return fibonacci(n-2) + fibonacci(n-1);
33 }
34 }
35
36
Listado 5.12.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*** Prototipo referencia***/
4 int mayor(int a, int b);
5 char mayor(char a, char b);
6 double mayor(double a, double b);
7 int main (int argc, char *argv[]) {
8 cout << mayor('x','y') << endl;
9 cout << mayor(10.10,15.15) << endl;
10 cout << mayor(23,12) << endl;
11 return(0);
12 }
13 int mayor(int a, int b){
14 return (a>b)? a: b;
15 }
16 char mayor(char a, char b){
17 return (a>b)? a: b;
18 }
19 double mayor(double a, double b){
20 return (a>b)? a: b;
21 }
Listado 5.13.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*** Prototipo referencia***/
4 int mayor(int a, int b);
5 int mayor(int a, int b, int c);
6 int mayor(int a, int b, int c, int d);
7 int main (int argc, char *argv[]) {
8 cout << mayor(23,12) << endl;
9 cout << mayor(23,12,50) << endl;
10 cout << mayor(23,12,25,66) << endl;
11 return(0);
12 }
13 int mayor(int a, int b){
14 return (a>b)? a: b;
15 }
16 int mayor(int a, int b, int c){
17 return mayor(mayor(a,b),c);
18 }
19 int mayor(int a, int b, int c, int d){
void qsort(
void *base,
size_t nmemb,
size_t tamanio,
int (*comparar)(const void *, const void *)
);
● Ordena un arreglo de nmemb objetos.
● El elemento inicial es apuntado por base.
● El tamaño de cada elemento del arreglo está especificado por tamanio.
● El contenido del arreglo es ordenado según una función de comparación apuntada por comparar, la cual es
llamada con dos argumentos que apuntan a los objetos a ser comparados.
● La función regresará un entero menor, igual, o mayor que cero si el primer objeto es considerado,
respectivamente a ser menor, igual, o mayor que el segundo.
1 #include <iostream>
2 #include <cstdlib>
3 using namespace std;
4 #define ELEMENTOS 20
5 /* Prototipo de la función */
6 int comparar(const void *arg1, const void *arg2);
7 int main()
8 {
9 int arreglo[ELEMENTOS], i;
10
11 /*Poblar el arreglo*/
12 for(i=0; i<ELEMENTOS; i++)
13 arreglo[i] = rand() % 100 + 1;
14
15 cout << "El arreglo antes de ser ordenado" << endl;
16 for(i=0; i<ELEMENTOS; i++)
17 cout << arreglo[i] << " ";
18
19 qsort(arreglo, ELEMENTOS, sizeof(arreglo[0]), &comparar);
20
21 cout << endl << "El arreglo despues de ser ordenado" << endl;
22 for(i=0; i<ELEMENTOS; i++)
23 cout << arreglo[i] << " ";
24
25 return 0;
26 }
Introducción:
En C++ podemos utilizar las librerías de ANSI C anteponiéndole al nombre de la librería la
letra “c” y eliminando la extensión .h, por ejemplo <ctime> en lugar de <time.h> o <cstdlib>
por <stdlib.h>.
Introducción a C++
1 #include <iostream>
2 #include <cstdlib>
3 #include <ctime>
4 using namespace std;
5
6 #define MAX 100
7 #define randomize (srand(time(NULL)))
8 #define random(num) (rand()%num)
9 int main () {
10 int i;
11
12 //antes de la semilla
13 for(i=0; i<10; i++) cout << random(MAX) << " ";
14 cout << endl << endl;
15
16 //Usamos la semilla
17 randomize;
18 //despues de la semilla
19 for(i=0; i<10; i++) cout << random(MAX) << " ";
20 cout << endl << endl;
21
22 //Usamos la semilla
23 srand(1);
24 //despues de la semilla
25 for(i=0; i<10; i++) cout << random(MAX) << " ";
26
27 return(0);
28 }
Listado 6.1.1. [Link]
1 #include <iostream>
2 #include <cstdlib>
3 #include <ctime>
4 using namespace std;
5
6 #define MAX 100
7 #define LIMITE 5
8 #define randomize (srand(time(NULL)))
9 #define random(num) (rand()%num+1)
10 int main () {
11 int i, n, num, op;
12
13 //Usamos la semilla
14 randomize;
15 //Iniciar variables
16 n = random(MAX);
17 op = 1;
18
19 //Ciclo
20 do{
21 cout << "Adivina el numero magico entre 1 y 100, oportunidad "
22 << op << " de " << LIMITE << endl;
23 cin >> num;
24 if(num>n) cout << "El numero " << num
25 << " es mayor al numero magico" << endl;
26 if(num<n) cout << "El numero " << num
27 << " es menor al numero magico" << endl;
28 if(num==n){
29 cout << "Adivinaste el numero magico" << endl;
30 break;
31 }
32 op++;
33 if(op>LIMITE){
34 cout << "Lo sentimos, no adivinaste el numero magico que era"
35 << n << endl;
36 break;
37 }
38 }while(n!=num);
39 return(0);
40 }
Listado 6.2.1. [Link]
1 #include <iostream>
2 #include <cstdlib>
3 #include <ctime>
4 using namespace std;
5
6 #define ELEMENTOS 7
7 #define randomize (srand(time(NULL)))
8 #define random(num) (rand()%num)
9 int main () {
10 string dias[ELEMENTOS] = {"Lunes","Martes","Miercoles",
11 "Jueves","viernes", "Sabado", "Domingo"};
12 int i, r;
13 string temp;
14
15 randomize;
16
17 for(i=0; i<ELEMENTOS; i++) cout << dias[i] << " ";
18 cout << endl << endl;
19
20 for(i=0; i<ELEMENTOS; i++){
21 r = random(ELEMENTOS);
22 temp = dias[i];
23 dias[i] = dias[r];
24 dias[r] = temp;
25 }
26
27 for(i=0; i<ELEMENTOS; i++) cout << dias[i] << " ";
28 return(0);
29 }
Listado 6.3.1. [Link]
1 #include <iostream>
2 #include <cstdlib>
3 using namespace std;
4 /*
5 Funciones utilitarias
6 */
7
8 int main () {
9 div_t division;
10 char entero[5] = "1234";
11 char largo[11] = "123.456789";
12 division = div(83,3);
13 cout << "Cociente " << [Link] << endl;
14 cout << "Residuo " << [Link] << endl;
15 cout << "Convertir la cadena a entero " << atoi(entero) << endl;
16 cout << "Convertir la cadena a flotante " << atof(largo) << endl;
17 return(0);
18 }
19
Listado 6.4.1. [Link]
1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4 /*
5 Funciones Matemáticas
6 */
7 int main () {
8 float numero;
9 do{
10 cout <<
11 "Dame un numero y calculare su raiz cuadrada (0 para terminar)"
12 << endl;
13 cin >> numero;
14
15 if(numero==0.0){
16 cout << "Gracias, hasta la vista..." << endl;
17 } else {
18 cout << "La raiz cuadrada de " << numero
19 << " es " << sqrt(numero) << endl;
20 }
21 }while(numero!=0.0);
22 return(0);
23 }
Listado 6.5.1. [Link]
1 #include <iostream>
2 #include <cmath>
3 using namespace std;
4 /*
5 Funciones Trigonométricas
6 */
7 #define PI 3.14159265
8 int main () {
9 double x,y,r,g;
10 x = 7;
11 y = 17;
12 g = 180/PI;
13 r = atan2(y,x)*g;
14
15 cout << "Los grados del punto (" << x << " , " << y
16 << ") son de " << r << " grados." << endl;
17
18 return(0);
19 }
20
Listado 6.6.1. [Link]
Tipos
● time_t:
1 #include <iostream>
2 #include <ctime>
3 using namespace std;
4 /* Funciones Tiempo */
5 int main( )
6 {
7 long int i = 0;
8 time_t inicio, fin;
9 struct tm *ptrInicio, *ptrFin;
10
11 inicio = time(NULL);
12 for(i=0; i<10000; i++) cout << ".";
13 fin = time(NULL);
14 cout << endl;
15
16 cout << "Inicio: " << inicio << endl;
17 cout << "Final: " << fin << endl;
18 cout << "Tiempo transcurrido: " << difftime(fin,inicio)
19 << " segundos" << endl;
20
21 ptrInicio = gmtime(&inicio);
22 ptrFin = gmtime(&fin);
23 cout << "Inicio: " << asctime(ptrInicio);
24 cout << "Final: " << asctime(ptrFin);
25 return 0;
26 }
Listado 6.7.1. [Link]
1 #include <iostream>
2 #include <ctime>
3 using namespace std;
4 /*
5 Funciones Tiempo
6 */
7 int main( )
8 {
9 int cdmx = -5;
10 int bs = -3;
11 int la = -7;
12 int paris = 2;
13 time_t utc;
14 struct tm *ptr;
15
16 time(&utc);
17
18 ptr = gmtime(&utc);
19
20 cout << "La hora en la Ciudad de Mexico: "
21 << ptr->tm_hour+cdmx << ":"
22 << ptr->tm_min << endl;
23
24 cout << "La hora en Buenos Aires: "
25 << ptr->tm_hour+bs << ":"
26 << ptr->tm_min << endl;
27
28 cout << "La hora en Los Angeles: "
29 << ptr->tm_hour+la << ":"
30 << ptr->tm_min << endl;
1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4 /* Funciones Cadenas */
5 int main( )
6 {
7 char s1[100] = "Hola Mundo";
8 char s2[100];
9 int i;
10
11 strcpy(s2,s1);
12 strcpy(s2+4,", desde el maravilloso mundo de C++");
13 cout << s1 << endl << s2 << endl;
14
15 strcpy(s2,"Hola Mundo");
16 strcat(s2,", espero que aprendas mucho.");
17 cout << s2 << endl;
18
19 strcpy(s1,"Hola Mundo");
20 strcpy(s2,"Hola MUNDO");
21
22 i = strcmp(s1,s2);
23
24 if(i>0) cout << "La cadena '"<< s1
25 << "' es mayor a la cadena '" << s2 <<"'" << endl;
26 else if(i<0) cout << "La cadena '"<< s1
27 << "' es menor a la cadena '" << s2 <<"'" << endl;
28 else cout << "La cadena '"<< s1
29 << "' es igual a la cadena '" << s2 <<"'" << endl;
30
31 i = strncmp(s1,s2,8);
32
33 cout << "Comparar los primeros 5 caracteres:"<< endl;
34 if(i>0) cout << "La cadena '"<< s1
35 << "' es mayor a la cadena '" << s2 <<"'" << endl;
36 else if(i<0) cout << "La cadena '"<< s1
1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4 /*
5 Funciones Cadenas
6 */
7 int main( )
8 {
9 char s1[81] = "En el agua clara que brota en la fuente un lindo pescado sale de repen
10 char s2[4] = " \n\t";
11 char *ptr;
12
13 cout << "La cadena original: " << s1 << endl;
14
15 /*Primera llamada*/
16 ptr = strtok(s1,s2);
17
18 cout << ptr << endl;
19
20 /* Las siguientes llamadas */
21 while((ptr = strtok(NULL,s2))!=NULL) cout << ptr << endl;
22
23 return 0;
24 }
25
Listado 6.10.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones Entrada
5 */
6 #define LON 100
7 int main( )
8 {
9 char titulo[LON], autor[LON];
10
11 cout << "Cual es tu libro preferido:" << endl;;
12 [Link](titulo,LON);
13
14 cout << "Autor:" << endl;
15 [Link](autor,LON);
16
17 cout << "Tu libro preferido es '" << titulo
18 << "' " << "y fue escrito por " << autor << endl;
19
20 return 0;
21 }
22
Listado 6.11.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones Entrada
5 */
6 #define LON 100
7 int main( )
8 {
9 char nombre, apellido;
10
11 cout << "Escribe tu nombre y tu apellido" << endl;
12
13 nombre = [Link]();
14 [Link](100,' ');
15
16 apellido = [Link]();
17
Introducción:
En el lenguaje C++ no sólo podemos manejar gran variedad de tipos de datos básicos como
enteros, coma flotante o booleanos. También podemos crear estructuras o variables
agregadas como los arreglos o las estructuras. Muy parecido a los “objetos” de otros
lenguajes que provienen del Lenguaje C.
Introducción a C++
7.1. Estructuras
● Una estructura es una colección de diferente tipos de datos.
● A cada elemento de una estructura se le llama miembro.
● Una definición de una estructura es:
struct <nombreEstructura>
{
<tipoDato> <nombreMiembro>;
<tipoDato> <nombreMiembro>;
<tipoDato> <nombreMiembro>;
...
};
● Podemos asignar valores por medio del operador = y las llaves con valores separados por comas.
● El operador sizeof() nos dará el espacio en bytes que ocupa la estructura en memoria.
1 #include <iostream>
2 using namespace std;
3 /*
4 Estructuras
5 */
6 struct libro{
7 char titulo[100];
8 char autor[100];
9 char editorial[100];
10 int anio;
11 int pag;
12 };
13 int main( )
14 {
15 struct libro libro1;
16 cout << "El numero de bytes en memoria de la estructura libro es de "
17 << sizeof(libro1) << endl;
18 return 0;
19 }
20
Listado 7.1.1. [Link]
<variable estructura>.<miembro>
O
<puntero estructura>-><miembro>
1 #include <iostream>
2 using namespace std;
3 /*Estructuras*/
4 struct libro{
5 char titulo[100];
6 char autor[100];
7 char editorial[100];
8 int anio;
9 int pag;
10 };
11 int main( )
12 {
13 struct libro *ptr;
14 struct libro libro1 = {"El llano en llamas",
15 "Juan Rulfo","Diana",1999,200};
16 ptr = &libro1;
17 //cambiamos un datos
18 [Link] = 2001;
19
20 //Notacion punto
21 cout << "Mi libro favorito es " << [Link]
22 << " y fue escrito por " << [Link] << endl;
23
24 //Apuntador y la flecha ->
25 cout << "Mi libro fue impreso en " << ptr->anio << " tiene "
26 << ptr->pag << " y es de la editorial " << ptr->editorial << endl;
27 return 0;
28 }
Listado 7.2.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /* Estructuras */
4 struct direccion{
5 char calle[40];
6 int numero;
7 char colonia[30];
8 };
9 struct usuario{
10 char nombre[40];
11 char apellidos[40];
12 struct direccion dir;
13 char telefono[15];
14 };
15 int main( )
16 {
17 struct usuario pepe = {
18 "Jose",
19 "Lopez",
20 {"Fuente del sol",12,"Fuentes de Satelite"},
21 "0445519719799"
22 };
23
24 cout << "Usuario: " << [Link] << ", "
25 << [Link] << endl;
26 cout << "Direccion: " << [Link] << " "
27 << [Link] << endl;
28 cout << "Colonia: " << [Link] << endl;
29 cout << "Telefono: " << [Link] << endl;
30 return 0;
31 }
Listado 7.3.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /* Estructuras */
4 struct stDireccion{
5 char calle[40];
6 int numero;
7 char colonia[30];
8 };
9 typedef struct stDireccion direccion;
10 typedef struct stUsuario{
11 char nombre[40];
12 char apellidos[40];
13 direccion dir;
14 char telefono[15];
15 } usuario;
16 int main( )
17 {
18 usuario pepe = {
19 "Jose","Lopez",
20 {"Fuente del sol",12,"Fuentes de Satelite"},
21 "0445519719799"
22 };
23
24 cout << "Usuario: " << [Link] << ", "
25 << [Link] << endl;
26 cout << "Direccion: " << [Link] << " "
27 << [Link] << endl;
28 cout << "Colonia: " << [Link] << endl;
29 cout << "Telefono: " << [Link] << endl;
30 return 0;
31 }
Listado 7.4.1. [Link]
1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4 /*
5 Estructuras
6 */
7 struct stLibro{
8 char titulo[100];
9 char autor[100];
10 int anio;
11 } libro[4] = {"El llano en llamas", "Juan Rulfo", 1999,
12 "Cien anios de soledad","Garcia Marquez", 2010,
13 "La guerra del fin del mundo","Mario Vargas Llosa", 2001};
14 int main( )
15 {
16 int i;
17
18 strcpy(libro[3].titulo,"El laberinto de la soledad");
19 strcpy(libro[3].autor,"Octavio Paz");
20 libro[3].anio = 2015;
21
22 cout <<"Mis libros favoritos" << endl;
23 for(i=0; i<4; i++){
24 cout << (i+1) << ") " << libro[i].titulo << ", " << libro[i].autor
25 << " impreso en " << libro[i].anio << endl;
26 }
27
28 return 0;
29 }
Listado 7.5.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Estructuras
5 */
6 struct direccion{
7 char calle[40];
8 struct {
9 int numInterior;
10 int numExterior;
11 char referencia[40];
12 };
13 char colonia[40];
14 } dir1 = {"Calle de la soledad", 10, 2,
15 "Puerta negra",
16 "Jardines de Bellavista"};
17 int main( )
18 {
19 cout << [Link] << " int. " << [Link]
20 << " ext. " << [Link] << ", ref. "
21 << [Link] << ", col. " <<[Link];
22
23 return 0;
24 }
Listado 7.6.1. [Link]
7.8. Uniones
● Las uniones son estructuras que permiten almacenar diferentes elementos de diferente tipo en el mismo espacio,
pero no en forma
union [<identificador>] {
[<tipo> <nombre_variable>[,<nombre_variable>,...]];
} [<variable_union>[,<variable_union>,...];
● Todos los miembros de una unión ocupan el mismo espacio e inician en el mismo punto.
● La longitud de una unión es su miembro más largo.
● El operador sizeof() nos indicará la longitud de la unión en bytes.
Introducción:
Los apuntadores o punteros son una herramienta fundamental en los lenguajes como C y
C++, que nos permitirá tener completo control de tipos de datos, arreglos, estructuras y
funciones.
Introducción a C++
1 #include <iostream>
2 using namespace std;
3 /*
4 Manejar cadenas como apuntadores
5 */
6 int longitudArreglo(const char cadena[]);
7 int longitudApuntador(const char*);
8 int main(){
9 char cadena[] = "En el agua clara que borta en la fuente";
10 cout << "La longitud de la cadena '" << cadena <<
11 " es de " << longitudArreglo(cadena) << " caracteres."
12 << endl << endl;
13
14 cout << "La longitud de la cadena '" << cadena <<
15 "' es de " << longitudApuntador(cadena) << " caracteres."
16 << endl << endl;
17 }
18 int longitudArreglo(const char c[]){
19 int p = 0;
20 while(c[p] != '\0') p++;
21 return p;
22 }
23 int longitudApuntador(const char* c){
24 int p = 0;
25 while(*c++) p++;
26 return p;
27 }
Listado 8.7.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Manejar apuntadores a constantes
5 SI podemos cambiar la dirección al que apuntamos
6 NO podemos cambiar el contenido
7 */
8 int main(){
9 //Constantes
10 const int x = 100;
11 const int y = 200;
12
13 //Creamos un apuntador
14 const int* ptr = &x;
15
16 //Cambiamos la dirección o referencia
17 //ptr = &y;
18
19 *ptr = 99;
20
21 return 0;
22 }
Listado 8.8.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Manejar apuntadores constantes
5 NO podemos cambiar la dirección al que apuntamos
6 SI podemos cambiar el contenido
7 */
8 int main(){
9 int x;
10 //Apuntador constante
11 int* const ptr = &x;
12 //Constante
13 int y = 10;
14
15 //Asignamos una nueva referencia
1 #include <iostream>
2 using namespace std;
3 /*
4 Manejar apuntadores constantes a constantes
5 NO podemos cambiar la dirección al que apuntamos
6 NO podemos cambiar el contenido
7 */
8 int main(){
9 //Constantes
10 int z;
11 const int y = 10;
12 //Apuntador constante
13 const int* const ptr = &y;
14
15 //cambiamos la referencia (error)
16 //*ptr = &z;
17
18 //cambiar el valor de una constante (error)
19 *ptr = 100;
20
21 return 0;
22 }
Listado 8.8.3. [Link]
1 #include <iostream>
2 using namespace std;
3 /* Libros */
4 struct libros{
5 char titulo[100]; char autor[100]; int pag;
6 };
7 typedef struct libros libro;
8 /* Prototipo */
9 void mostrarLibro(libro *ptr);
10 int main()
11 {
12 int i;
13 libro misLibros[] = {
14 {"El llano en llamas","Juan Rulfo",120},
15 {"El amor en tiempos del colera","Gabriel Garcia Marquez",800},
16 {"La guerra del fin del mundo","Mario Vargas Llosa", 800}
17 };
18 libro* ptr;
19 //Recibimos la referencia
20 ptr = misLibros;
21 for(i=0; i<3; i++, ptr++) mostrarLibro(ptr);
22 return 0;
23 }
24 void mostrarLibro(libro *ptr){
25 cout << "Titulo: " << ptr->titulo << endl;
26 cout << "Autor : " << ptr->autor << endl;
27 cout << "Paginas: " << ptr->pag << endl;
28 cout << "------------------" << endl;
29 }
Listado 8.9.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*Aritmetica de apuntadores*/
4 int main()
5 {
6 const int LON = 80;
7 char cadena[LON];
8 char* ptr;
9
10 cout << "Introduce una oracion:" << endl;
11 [Link](cadena,LON);
12
13 //Asignamos la referencia al apuntador
14 ptr = &cadena[0];
15
16 while(*ptr){
17 //Si a una minuscula restamos 32,
18 //la convertimos a mayuscula
19 if((*ptr>='a') && (*ptr<='z')) *ptr = *ptr - 32;
20 ptr++;
21 }
22
23 //Desplegamos la nueva cadena
24 cout << "La nueva cadena es: " << endl;
25 cout << cadena << endl;
26 return 0;
27 }
Listado 8.10.1. [Link]
Introducción:
La programación orientada a objetos convierte al lenguaje C++ es uno de los lenguajes más
poderosos para desarrollar. Los principios fundamentales serán; la abstracción, la herencia,
el polimorfismo y el encapsulamiento.
Introducción a C++
1 #include <iostream>
2 #include "naves.h"
3 using namespace juego2D;
4 /*
5 Espacios de nombres
6 */
7 int main()
8 {
9 Nave nave1 = {10,20};
10 juego3D::Nave nave2 = {30,20,10};
11
12 std::cout << "Coordenadas de la nave 2D: "
13 << nave1.x << ", " << nave1.y << std::endl;
14
15 std::cout << "Coordenadas de la nave 3D: "
16 << nave2.x << ", " << nave2.y << ", "
17 << nave2.z << std::endl;
18
19 return 0;
20 }
Listado 9.1.1. [Link]
1 namespace juego2D{
2 struct Nave{
3 int x;
4 int y;
5 };
6 }
7 namespace juego3D{
8 struct Nave{
9 int x;
10 int y;
Elementos de un clase
● Propiedad: Una característica del Objeto, como el número de balas de un tanque.
● Método: Una capacidad del Objeto, como disparar().
● Constructor: Es un método llamado en el momento de la creación de instancias.
● Herencia: Una Clase puede heredar características de otra Clase.
● Encapsulamiento: Una Clase sólo define las características del Objeto, un Método sólo define cómo se ejecuta el
Método.
● Abstracción: La conjunción de herencia compleja, métodos, propiedades que un objeto debe ser capaz de simular
en un modelo de la realidad.
● Polimorfismo: Diferentes Clases podrían definir el mismo método o propiedad.
Modificadores de acceso
● Public: En todas partes
● Private: Sólo en la clase
● Protected: En la clase y en sus clases hijitas
class <identificador>{
private:
<listado de propiedades y métodos>
public:
<listado de propiedades y métodos>
protected:
<listado de propiedades y métodos>
}
1 #include <iostream>
2 using namespace std;
3 /* Definición de clases */
4 class Nave{
5 private:
6 int x,y;
7 public:
8 void coordenadas(int x2, int y2){
9 x = x2;y = y2;
10 }
11 void leeCoordenadas(int &x2, int &y2){
12 x2 = x;y2 = y;
13 }
14 };
15 int main()
16 {
17 //Creamos la instancia
18 Nave nave1;
19 //Variables de trabajo
20 int x,y;
21 //Definimos las cordenadas de la nave
22 [Link](23,56);
23 //Recuperamos los valores de la nave
24 [Link](x,y);
25 //Desplegamos las coordenadas
26 cout << "La nave se encuentra en las coordenadas x="
27 << x << ", y=" << y << endl;
28 return 0;
29 }
Listado 9.3.1. [Link]
1 #include <iostream>
2 #include "Nave.h"
3 using namespace std;
4 /* Definición de clases */
5 int main()
6 {
7 //Creamos la instancia
8 Nave nave1;
9 //Variables de trabajo
10 int x,y;
11
12 //Definimos las cordenadas de la nave
13 [Link](23,56);
14 //Recuperamos los valores de la nave
15 [Link](x,y);
16 //Desplegamos las coordenadas
17 cout << "La nave se encuentra en las coordenadas x="
18 << x << ", y=" << y << endl;
19 return 0;
20 }
Listado 9.4.1. [Link]
1 class Nave{
2 private:
3 int x,y;
4 public:
5 void coordenadas(int x2, int y2);
6 void leeCoordenadas(int &x2, int &y2);
7 };
8 void Nave::coordenadas(int x2, int y2){
9 x = x2;
10 y = y2;
11 }
12 void Nave::leeCoordenadas(int &x2, int &y2){
13 x2 = x;
14 y2 = y;
15 }
Listado 9.4.2. Nave.h
9.5. Constructores
● Las funciones constructoras o constructores son funciones que nos permiten iniciar las instancias de las clases,
● El nombre de las funciones constructoras deben tener el mismo nombre de las clases.
● No regresan ningún valor, por lo que no tienen ningún tipo de dato, ni siquiera void.
● Tienen que ser públicas, nunca privadas o protegidas.
● Las funciones constructoras no se pueden heredar.
1 #include <iostream>
2 #include "Nave.h"
3 using namespace std;
4 /*
5 Definición de clases
6 */
7
8 int main()
9 {
10 //Creamos la instancia
11 Nave nave1(11,22);
12 //Variables de trabajo
13 int x,y;
14
15 //Recuperamos los valores de la nave
16 [Link](x,y);
17 //Desplegamos las coordenadas
18 cout << "La nave se encuentra en las coordenadas x="
19 << x << ", y=" << y << endl;
20 return 0;
21 }
Listado 9.5.1. [Link]
1 class Nave{
2 private:
3 int x,y;
4 public:
5 Nave(int x2, int y2);
6 void coordenadas(int x2, int y2);
7 void leeCoordenadas(int &x2, int &y2);
8 };
9 Nave::Nave(int x2, int y2){
10 x = x2;
11 y = y2;
12 }
13 void Nave::coordenadas(int x2, int y2){
14 x = x2;
15 y = y2;
16 }
17 void Nave::leeCoordenadas(int &x2, int &y2){
1 #include <iostream>
2 #include "Nave.h"
3 using namespace std;
4 /*
5 Definición de clases
6 */
7
8 int main()
9 {
10 //Creamos la instancia
11 Nave nave1(33,44);
12 //Variables de trabajo
13 int x,y;
14
15 //Recuperamos los valores de la nave
16 [Link](x,y);
17 //Desplegamos las coordenadas
18 cout << "La nave se encuentra en las coordenadas x="
19 << x << ", y=" << y << endl;
20 return 0;
21 }
Listado 9.6.1. [Link]
1 class Nave{
2 private:
3 int x,y;
4 public:
5 Nave(int x2, int y2);
6 void coordenadas(int x2, int y2);
7 void leeCoordenadas(int &x2, int &y2);
8 };
9 Nave::Nave(int x2, int y2): x(x2), y(y2) {}
10 void Nave::coordenadas(int x2, int y2){
11 x = x2;
12 y = y2;
13 }
14 void Nave::leeCoordenadas(int &x2, int &y2){
15 x2 = x;
16 y2 = y;
17 }
Listado 9.6.2. Nave.h
1 #include <iostream>
2 #include "Nave.h"
3 using namespace std;
4 /* Definición de clases */
5 int main()
6 {
7 //Creamos la instancia
8 Nave nave1(333,444);
9 Nave nave2(nave1);
10 //Variables de trabajo
11 int x1,y1,x2,y2;
12
13 //nave2=nave1;
14
15 //Recuperamos los valores de la nave
16 [Link](x1,y1);
17 //Desplegamos las coordenadas
18 cout << "La nave 1 se encuentra en las coordenadas x="
19 << x1 << ", y=" << y1 << endl << endl;
20
21 //Recuperamos los valores de la nave
22 [Link](x2,y2);
23 //Desplegamos las coordenadas
24 cout << "La nave 2 se encuentra en las coordenadas x="
25 << x2 << ", y=" << y2 << endl;
26 return 0;
27 }
Listado 9.7.1. [Link]
1 class Nave{
2 private:
3 int x,y;
4 public:
5 Nave(int x2=0, int y2=0);
6 //constructor copia
7 Nave(const Nave &ptr);
8 void coordenadas(int x2, int y2);
9 void leeCoordenadas(int &x2, int &y2);
10 };
11 //Funciones constructoras
12 Nave::Nave(int x2, int y2): x(x2), y(y2) {}
1 #include <iostream>
2 #include "Nave.h"
3 using namespace std;
4 /* Definición de clases */
5
6 int main()
7 {
8 //Creamos la instancia
9 Nave nave1(333,444);
10 Nave nave2(nave1);
11 //Variables de trabajo
12 int x1,y1,x2,y2;
13
14 //nave2=nave1;
15
16 //Recuperamos los valores de la nave
17 [Link](x1,y1);
18 //Desplegamos las coordenadas
19 cout << "La nave 1 se encuentra en las coordenadas x="
20 << x1 << ", y=" << y1 << endl << endl;
21
22 //Recuperamos los valores de la nave
23 [Link](x2,y2);
24 //Desplegamos las coordenadas
25 cout << "La nave 2 se encuentra en las coordenadas x="
26 << x2 << ", y=" << y2 << endl;
27 return 0;
28 }
Listado 9.8.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 El apuntador this
5 */
6 class Nave{
7 public:
8 Nave(){}
9 //Método
10 void identificate(Nave &c){
11 if(&c==this) cout << "No dispares" << endl;
12 else cout << "Dispara..." << endl;
13 }
14 };
15 int main()
16 {
17 Nave amiga, enemiga;
18
19 [Link](amiga);
20 [Link](enemiga);
21 return 0;
22 }
Listado 9.9.1. [Link]
Introducción:
En C++ tenemos una amplia gama de herramientas en la programación orientada a objetos
que nos permitirá crear funciones amigas, funciones amigas en las clases o hacer clases
amigas, crear getters y setters. entre muchas más herramientas que harán muy potente
nuestra programación OOP.
Introducción a C++
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones amigas
5 */
6 class Nave{
7 public:
8 Nave(int n=0):balas(n){};
9 int numBalas(){
10 cout << "Balas desde la clase: " << balas << endl;
11 }
12 private:
13 int balas;
14 friend void numBalas(Nave n);
15 };
16 /* Prototipos */
17 void numBalas(Nave n);
18 int main()
19 {
20 Nave nave1(100);
21
22 [Link]();
23 numBalas(nave1);
24 return 0;
25 }
26 void numBalas(Nave n){
27 cout << "Balas desde la funcion amiga: " << [Link] << endl;
28 }
Listado 10.1.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones amigas en clases
5 */
6 class Nave;
7
8 class Asteroide{
9 public:
10 Asteroide(int v=0): velocidad(v) {}
11 void veloz(){
12 cout << "velocidad asteroide: " << velocidad << endl;
13 }
14 bool esVeloz(Nave n);
15 private:
16 int velocidad;
17 };
18
19 class Nave{
20 friend bool Asteroide::esVeloz(Nave n);
21 public:
22 Nave(int v=0): velocidad(v) {}
23 void veloz(){
24 cout << "velocidad nave: " << velocidad << endl;
25 }
26 private:
27 int velocidad;
28 };
29 /****************************/
30
31 /* Prototipos */
32 bool Asteroide::esVeloz(Nave n){
33 return velocidad > [Link];
34 }
35 int main()
36 {
37 Nave n(100);
38 Asteroide a(180);
39
40 [Link]();
41 [Link]();
42
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones amigas en clases
5 */
6 class Nave{
7 friend class Asteroide;
8 public:
9 Nave(int v=0): velocidad(v) {}
10 void veloz(){
11 cout << "velocidad nave: " << velocidad << endl;
12 }
13 private:
14 int velocidad;
15 };
16 /****************************/
17 class Asteroide{
18 public:
19 Asteroide(int v=0): velocidad(v) {}
20 void veloz(){
21 cout << "velocidad asteroide: " << velocidad << endl;
22 }
23 bool esVeloz(Nave n);
24 private:
25 int velocidad;
26 };
27
28
29 /* Prototipos */
30 bool Asteroide::esVeloz(Nave n){
31 return velocidad > [Link];
32 }
33 int main()
34 {
35 Nave n(100);
36 Asteroide a(180);
37
38 [Link]();
39 [Link]();
40
41 if([Link](n))
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones setters y getters
5 */
6 class Nave{
7 public:
8 Nave(int v=0, int vi=3, int b=100):
9 velocidad(v), vidas(vi), balas(b){};
10 //
11 void setBalas(int);
12 void setVidas(int);
13 void setVelocidad(int);
14 //
15 int getBalas();
16 int getVidas();
17 int getVelocidad();
18 private:
19 int velocidad, vidas, balas;
20 };
21 void Nave::setBalas(int b){
22 if(b<0) b = 0;
23 balas = b;
24 }
25 void Nave::setVidas(int v){
26 if(v<0) v = 0;
27 if(v>10) v = 10;
28 vidas = v;
29 }
30 void Nave::setVelocidad(int v){
31 if(v<0) v = 0;
32 if(v>100) v = 100;
33 velocidad = v;
34 }
35 //
36 int Nave::getBalas(){
37 return balas;
38 }
39 int Nave::getVidas(){
40 return vidas;
41 }
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones inline
5 */
6 class Nave{
7 public:
8 Nave(int v);
9 void muestraVelocidad();
10 private:
11 int velocidad;
12 };
13 inline Nave::Nave(int v): velocidad(v){};
14 inline void Nave::muestraVelocidad(){
15 cout << "La velocidad es: " << velocidad << endl;
16 }
17
18 int main()
19 {
20 Nave nave1(100);
21
22 [Link]();
23
24 return 0;
25 }
Listado 10.5.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones constantes
5 */
6 class Nave{
7 public:
8 Nave(int v=0);
9 void setVelocidad(int v);
10 int getVelocidad() const;
11 private:
12 int velocidad;
13 };
14 Nave::Nave(int v): velocidad(v){};
15 void Nave::setVelocidad(int v){
16 if(v<0) v = 0;
17 if(v>100) v = 100;
18 velocidad = v;
19 }
20 int Nave::getVelocidad() const {
21 return velocidad++;
22 }
23 int main()
24 {
25 Nave nave1(100);
26 [Link](80);
27 cout << "La velocidad de la nave es: " << [Link]()
28 << endl;
29
30 return 0;
31 }
Listado 10.6.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones constantes
5 */
6 class Nave{
7 public:
8 Nave(int v=0);
9 void setVelocidad(int v);
10 const int getVelocidad() const ;
11 private:
12 int velocidad;
13 };
14 Nave::Nave(int v): velocidad(v){};
15 void Nave::setVelocidad(int v){
16 if(v<0) v = 0;
17 if(v>100) v = 100;
18 velocidad = v;
19 }
20 const int Nave::getVelocidad() const {
21 return velocidad;
22 }
23 int main()
24 {
25 Nave nave1(100);
26 [Link](80);
27 cout << "La velocidad de la nave es: " << [Link]()
28 << endl;
29
30 return 0;
31 }
Listado 10.7.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Funciones sobrecargadas
5 */
6 class Nave{
7 public:
8 Nave(int v=0, int vi=3, int b=10);
9 void modificaDatos(int v);
10 void modificaDatos(int v, int vi);
11 void modificaDatos(int v, int vi, int b);
12 const int getVelocidad() const ;
13 const int getVidas() const ;
14 const int getBalas() const ;
15 private:
16 int velocidad, vidas, balas;
17 };
18 Nave::Nave(int v, int vi, int b):
19 velocidad(v), vidas(vi), balas(b) {};
20
21 void Nave::modificaDatos(int v){
22 if(v<0) v = 0;
23 if(v>100) v = 100;
24 velocidad = v;
25 }
26 void Nave::modificaDatos(int v, int vi){
27 if(v<0) v = 0;
28 if(v>100) v = 100;
29 velocidad = v;
30
31 if(vi<0) vi = 0;
32 if(vi>5) vi = 5;
33 vidas = vi;
34 }
35 void Nave::modificaDatos(int v, int vi, int b){
36 if(v<0) v = 0;
37 if(v>100) v = 100;
38 velocidad = v;
39
40 if(vi<0) vi = 0;
41 if(vi>5) vi = 5;
42 vidas = vi;
43
44 if(b<0) b = 0;
1 #include <iostream>
2 using namespace std;
3 /*
4 Operadores sobrecargadas
5 */
6 class Tiempo{
7 public:
8 Tiempo(int h=0, int m=0): hora(h), min(m){};
9 void mostrar();
10 //Sobrecargamos el operador suma
11 Tiempo operator+(Tiempo h);
12 private:
13 int hora,min;
14 };
15 //
16 void Tiempo::mostrar(){
17 cout << hora << ":" << min << endl;
18 }
19 Tiempo Tiempo::operator+(Tiempo h){
20 Tiempo res;
21
22 [Link] = min + [Link];
23 [Link] = hora + [Link];
24
25 if([Link]>=60){
26 [Link] -= 60;
27 [Link]++;
28 }
29
30 return res;
31 }
32 int main()
33 {
34 Tiempo video1(1,10), video2(2,55), video3(0,40), total;
35
36 total = video1 + video2 + video3;
1 #include <iostream>
2 #include "Tiempo.h"
3 using namespace std;
4 /*
5 Operadores sobrecargadas
6 */
7
8 int main()
9 {
10 Tiempo video1(1,10), video2(2,55), video3(0,54), total;
11
12 total = video1 + video2 + video3;
13 [Link]();
14
15 cout << "Incrementamos el tiempo en un minuto" << endl;
16 ++total;
17 [Link]();
18
19 return 0;
20 }
Listado 10.10.1. [Link]
1 class Tiempo{
2 public:
3 Tiempo(int h=0, int m=0): hora(h), min(m){};
4 void mostrar();
5 //Sobrecargamos el operador suma
6 Tiempo operator+(Tiempo h);
7 //Sobrecargamos el operador ++
8 Tiempo & operator++();
9 private:
10 int hora,min;
11 };
12 //
13 void Tiempo::mostrar(){
14 std::cout << hora << ":" << min << std::endl;
15 }
16 Tiempo Tiempo::operator+(Tiempo h){
17 Tiempo res;
18
19 [Link] = min + [Link];
20 [Link] = hora + [Link];
21
22 if([Link]>=60){
23 [Link] -= 60;
1 #include <iostream>
2 #include <cmath>
3 #include "Punto.h"
4 #include "Polar.h"
5 using namespace std;
6 /*
7 Operadores sobrecargadas
8 */
9
10 int main()
11 {
12 Punto punto1;
13 Polar polar1(100.0, 0.785398);
14 //Conversion
15 punto1 = polar1;
16
17 cout << "El punto polar es: " << endl;
18 [Link]();
19
20 cout << "El punto cartesiano es: " << endl;
21 [Link]();
22
23 return 0;
24 }
Listado 10.11.1. [Link]
1 class Polar{
2 public:
3 Polar(){
4 radio = 0.0;
5 angulo = 0.0;
6 }
7 Polar(double r, double a){
8 radio = r; angulo = a;
9 }
10 void mostrar(){
11 std::cout << radio << ", " << angulo << std::endl;
12 }
13 //funcion de conversion
1 class Punto{
2 public:
3 Punto(){
4 x = 0.0;
5 y = 0.0;
6 }
7 Punto(double xx, double yy){
8 x = xx; y = yy;
9 }
10 void mostrar(){
11 std::cout << x << ", " << y << std::endl;
12 }
13 private:
14 double x,y;
15 };
Listado 10.11.3. Punto.h
Introducción:
En esta sección revisaremos los principios de herencia y polimorfismo:
● Herencia: clases derivadas
● Constructores de una clase derivada
● Funciones que se relacionen entre clases heredadas,
● Sobreescribir funciones en las clases heredadas,
● Sobreescribir y sobrecargar funciones miembro,
● Herencia múltiples,
● Herencias virtuales, enlaces dinámicos,
● Funciones virtuales
● Polimorfismo.
Introducción a C++
1 #include <iostream>
2 #include "Armamento.h"
3 #include "Nave.h"
4 using namespace std;
5 /*
6 Herencia
7 */
8 int main()
9 {
10
11 return 0;
12 }
Listado 11.1.1. [Link]
1 class Armamento{
2 private:
3 int balas;
4 int vidas;
5 int velocidad;
6 public:
7 Armamento(int b, int vi, int v);
8 int getBalas() const;
9 int getVidas() const;
10 int getVelocidad() const;
11 };
Listado 11.1.2. Armamento.h
1 #include <iostream>
2 #include "Armamento.h"
3 #include "Nave.h"
4 #include "Tanque.h"
5 using namespace std;
6 /*
7 Herencia
8 */
9 int main()
10 {
11 Tanque tanque1(100,3,20,50);
12 Nave nave1(100,5,100,3);
13
14 cout << "Las vidas del tanque son: "
15 << [Link]() << endl;
16 cout << "Las vidas de la nave son: "
17 << [Link]() << endl;
18 return 0;
19 }
Listado 11.2.1. [Link]
1 class Armamento{
2 private:
3 int balas;
4 int vidas;
5 int velocidad;
6 public:
7 Armamento(int b, int vi, int v):
8 balas(b), vidas(vi), velocidad(v){}
9 int getBalas() const { return balas; };
10 int getVidas() const { return vidas; };
11 int getVelocidad() const { return velocidad; };
12 };
Listado 11.2.2. Armamento.h
1 #include <iostream>
2 using namespace std;
3 /*
4 Herencia: llamar a un método de otra clase
5 */
6 class Nave{
7 private:
8 int balas;
9
10 public:
11 Nave(int b):balas(b){
12 cout << "Constructor de la Nave" << endl;
13 }
14 int getBalas() const { return balas; }
15 };
16 class Tanque{
17 private:
18 int vidas;
19 Nave NaveBalas;
20
21 public:
22 Tanque(int b, int v):NaveBalas(b),vidas(v){
23 cout << "Constructor del Tanque" << endl;
24 }
25 int getBalas() const { return [Link](); }
26 int getVidas() const { return vidas; }
27 };
28 int main()
29 {
30 Tanque tanque1(15,3);
31
32 cout << "Balas " << [Link]() <<
33 ", vidas " << [Link]() << endl;
34
35 return 0;
36 }
Listado 11.3.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Herencia: llamar a las funciones destructoras
5 */
6 class Nave{
7 private:
8 int balas;
9
10 public:
11 Nave(int b):balas(b){
12 cout << "Constructor de la Nave" << endl;
13 }
14 ~Nave(){ cout << "Destruimos la nave..." << endl; }
15 int getBalas() const { return balas; }
16 };
17 class Tanque{
18 private:
19 int vidas;
20 Nave NaveBalas;
21
22 public:
23 Tanque(int b, int v):NaveBalas(b),vidas(v){
24 cout << "Constructor del Tanque" << endl;
25 }
26 ~Tanque(){ cout << "Destruimos el tanque..." << endl; }
27 int getBalas() const { return [Link](); }
28 int getVidas() const { return vidas; }
29 };
30 int main()
31 {
32 Tanque tanque1(15,3);
33
34 cout << "Balas " << [Link]() <<
35 ", vidas " << [Link]() << endl;
36
37 return 0;
38 }
Listado 11.4.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Herencia: llamar a las funciones destructoras
5 */
6 class Nave{
7 private:
8 int balas;
9
10 public:
11 Nave(int b):balas(b){
12 cout << "Constructor de la Nave" << endl;
13 }
14 ~Nave(){ cout << "Destruimos la nave..." << endl; }
15 int getBalas() const { return balas; }
16 void mostrar(){
17 cout << "Numero de balas: " << balas << endl;
18 }
19 };
20 class Tanque : public Nave{
21 private:
22 int vidas;
23
24 public:
25 Tanque(int b, int v):Nave(b),vidas(v){
26 cout << "Constructor del Tanque" << endl;
27 }
28 ~Tanque(){ cout << "Destruimos el tanque..." << endl; }
29 int getVidas() const { return vidas; }
30 void mostrar(){
31 cout << "Numero de balas: " << getBalas() << endl;
32 cout << "Numero de vidas: " << vidas << endl;
33 }
34 };
35 int main()
36 {
37 Tanque tanque1(15,3);
38
39 cout << "Llamamos a la función desde tanque" << endl;
40 [Link]();
41
42 cout << endl << "Llamamos a la función desde nave" << endl;
1 #include <iostream>
2 using namespace std;
3 /*
4 Herencia: overriding y sobrecargados
5 */
6 class Nave{
7 public:
8 void avanzar() { cout << "Avanzamos un km." << endl;}
9 void avanzar(int k) { cout << "Avanzamos " << k << " km." << endl;}
10 };
11 class Tanque : public Nave{
12 public:
13 void avanzar() { cout << "El tanque avanza 2 km." << endl; }
14 };
15 int main()
16 {
17 Tanque tanque1;
18
19 [Link]();
20 [Link]::avanzar();
21 [Link]::avanzar(7);
22
23 return 0;
24 }
Listado 11.6.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Herencia multiple
5 */
6 class Nave{
7 public:
8 Nave() : balas(10) {};
9 int mostrar() const { return balas;}
10 protected:
11 int balas;
12 };
13 class Coordenadas{
14 public:
15 Coordenadas() : posX(20), posY(30) {};
16 int mostrar() const { return posX;}
17 protected:
18 int posX, posY;
19 };
20 class Tanque: public Nave, public Coordenadas{
21 public:
22 int mostrar() const { return Nave::mostrar(); }
23 };
24 int main()
25 {
26 Tanque tanque1;
27
28 //Un problema de ambiguedad
29 //cout << "Balas: " << [Link]::mostrar() << endl;
30 //cout << "Pos x: " << [Link]::mostrar() << endl;
31
32 cout << "Balas: " << [Link]() << endl;
33
34 return 0;
35 }
Listado 11.7.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /* Herencia constructores */
4 class Nave{
5 public:
6 Nave() : balas(10) {};
7 Nave(int b) : balas(b) {};
8 int mostrar() const { return balas;}
9 protected:
10 int balas;
11 };
12 class Coordenadas{
13 public:
14 Coordenadas() : posX(20), posY(30) {};
15 Coordenadas(int xx, int yy) : posX(xx), posY(yy) {};
16 void mostrar() const {
17 cout << "Coordenadas: " << posX << "," << posY << endl;
18 }
19 protected:
20 int posX, posY;
21 };
22 /*** Clase derivada ****/
23 class Tanque: public Nave, public Coordenadas{
24 public:
25 Tanque(int b, int x, int y) : Nave(b), Coordenadas(x,y) {};
26 int mostrarBalas() const { return Nave::mostrar(); }
27 void mostrarCoordenadas() const { Coordenadas::mostrar(); }
28 private:
29 int x,y,b;
30 };
31 int main()
32 {
33 Tanque tanque1(100,40,50);
34 //Un problema de ambiguedad
35 //cout << "Balas: " << [Link]::mostrar() << endl;
36 //cout << "Pos x: " << [Link]::mostrar() << endl;
37 cout << "Balas: " << [Link]() << endl;
38 [Link]();
39 return 0;
40 }
Listado 11.8.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /* Herencia virtual */
4 class Mamifero{
5 public:
6 Mamifero(string n) : nombre(n) {}
7 string getNombre() const { return nombre;}
8 protected:
9 string nombre;
10 };
11 class Caballo : virtual public Mamifero{
12 public:
13 Caballo(string n, int p) : Mamifero(n), peso(p) {}
14 int getPeso() const { return peso;}
15 void setPeso(int p){peso = p;}
16 protected:
17 int peso;
18 };
19 class Burro : virtual public Mamifero{
20 public:
21 Burro(string n, int e) : Mamifero(n), edad(e) {}
22 int getEdad() const { return edad;}
23 void setEdad(int e){edad = e;}
24 protected:
25 int edad;
26 };
27 class Mula : public Caballo, public Burro{
28 public:
29 Mula(string n, int p, int e):
30 Mamifero(n), Caballo(n, p), Burro(n, e) {}
31 };
32 int main()
33 {
34 Mula mula1("Maicera", 100, 15);
35 cout << "Nombre de la mula: " << [Link]() << ", "
36 << "Peso " << [Link]() << " kilos, "
37 << "Edad: " << [Link]() << " anios" << endl;
38 return 0;
39 }
Listado 11.9.1. [Link]
● Enlaces o ligaduras: es cuando el compilador relaciona un identificador con su contenido. Si es una función, sería
el nombre de la función con su código, si es una variable, relacionar su contenido con su valor.
● Cuando el compilador realiza el enlace o ligadura, se le conoce como “tiempo de ligadura o enlace”.
● Si la ligadura se realiza en “tiempos de compilación”, se le conoce como ligadura estática o enlace estático.
● Si la ligadura se realiza en “tiempo de ejecución” se le conoce como ligadura dinámica o enlace dinámico.
● En lenguajes como Java, PHP, Eiffel, SmallTalk los enlaces siempre son dinámicos.
● En C# y C++ los enlaces son estáticos, pero el programador puede hacerlos dinámicos.
● En C++ hacemos un enlace dinámico con la palabra reservada virtual.
● Necesitamos utilizar a las referencias de las clases como apuntadores o referencias.
● Las funciones virtuales deben declarar como virtual en la clase primer clase en la que están presente.
1 #include <iostream>
2 using namespace std;
3 /*
4 Ligadura estatica
5 */
6 class Mamifero{
7 public:
8 Mamifero(string n) : nombre(n) {}
9 string getNombre() const { return nombre;}
10 void setNombre() {
11 cout << "Mamifero: " << nombre << endl;
12 }
13 protected:
14 string nombre;
15 };
16 class Caballo : virtual public Mamifero{
17 public:
18 Caballo(string n, int p) : Mamifero(n), peso(p) {}
19 int getPeso() const { return peso;}
20 void setPeso(int p){peso = p;}
21 void setNombre() {
22 cout << "Caballo: " << nombre << endl;
23 }
24 protected:
25 int peso;
26 };
27 class Burro : virtual public Mamifero{
28 public:
29 Burro(string n, int e) : Mamifero(n), edad(e) {}
30 int getEdad() const { return edad;}
31 void setEdad(int e){edad = e;}
32 void setNombre() {
1 #include <iostream>
2 using namespace std;
3 /*
4 Ligadura estatica
5 */
6 class Mamifero{
7 public:
8 Mamifero(string n) : nombre(n) {}
9 string getNombre() const { return nombre;}
10 virtual void setNombre() {
11 cout << "Mamifero: " << nombre << endl;
12 }
13 protected:
14 string nombre;
15 };
16 class Caballo : virtual public Mamifero{
17 public:
18 Caballo(string n, int p) : Mamifero(n), peso(p) {}
19 int getPeso() const { return peso;}
20 void setPeso(int p){peso = p;}
21 void setNombre() {
22 cout << "Caballo: " << nombre << endl;
23 }
24 protected:
25 int peso;
26 };
27 class Burro : virtual public Mamifero{
28 public:
29 Burro(string n, int e) : Mamifero(n), edad(e) {}
30 int getEdad() const { return edad;}
31 void setEdad(int e){edad = e;}
32 void setNombre() {
33 cout << "Burro: " << nombre << endl;
34 }
35 protected:
36 int edad;
37 };
38 int main()
39 {
40 Mamifero *caballo1 = new Caballo("Mrs. Ed",100);
41 Mamifero *burro1 = new Burro("Paco",12);
11.12. Polimorfismo
● Polimorfismo: Podemos llamar a una función miembro en objetos diferentes, llamarse igual y hacer cosas
diferentes.
● Las funciones virtuales se declaran en la clase base.
● Las implementaciones específicas de las funciones virtuales se realizan en las clases derivadas.
● Las instancias de las clases se deben utilizar como apuntadores o referencias.
1 #include <iostream>
2 using namespace std;
3 /*
4 Polimorfismo
5 */
6 class Mamifero{
7 public:
8 Mamifero(string n):nombre(n){}
9 virtual void hablar(){
10 cout << nombre << " el mamifero dice jajaja" << endl;
11 }
12 protected:
13 string nombre;
14 };
15 class Gato : public Mamifero{
16 public:
17 Gato(string n):Mamifero(n){}
18 void hablar(){
19 cout << nombre << " el gato dice miau, miau" << endl;
20 }
21 };
22 class Perro : public Mamifero{
23 public:
24 Perro(string n):Mamifero(n){}
25 void hablar(){
26 cout << nombre << " el perro dice guau, guau" << endl;
27 }
28 };
29 class Humano : public Mamifero{
30 public:
31 Humano(string n):Mamifero(n){}
32 void hablar(){
33 cout << nombre << " el humano dice bla, bla, bla" << endl;
34 }
35 };
36 int main()
37 {
38 Humano humano("Pepe");
39 Gato gato("Cucho");
40 Perro perro("Fido");
41 //Referencias
Introducción:
En esta sección estudiaremos:
● Plantillas o templates
● Tipos de datos
● Plantillas en archivo de encabezados
● Plantillas y arreglos
● Plantillas de clases
● Plantillas en archivos de encabezado
● Crear una clase Pila
● Clases plantilla con clases
Introducción a C++
1 #include <iostream>
2 using namespace std;
3 /*
4 Plantillas
5 */
6 template <typename T>
7 void intercambiar(T &v1, T &v2){
8 T temp;
9 temp = v1;
10 v1 = v2;
11 v2 = temp;
12 }
13 int main()
14 {
15 int num1 = 6, num2 = 10;
16 cout << "Numeros originales " << num1 << ", "
17 << num2 << endl;
18 intercambiar(num1,num2);
19 cout << "Numeros intercambiados " << num1 << ", "
20 << num2 << endl;
21 cout << "----------------" << endl;
22
23 char car1 = 'Z', car2 = 'A';
24 cout << "Caracteres originales " << car1 << ", "
25 << car2 << endl;
26 intercambiar(car1,car2);
27 cout << "Caracteres intercambiados " << car1 << ", "
28 << car2 << endl;
29
30 return 0;
31 }
Listado 12.1.1. [Link]
1 #include <iostream>
2 using namespace std;
3 /*
4 Plantillas parámetros
5 */
6 template <typename T>
7 string comparar(T v1, T v2){
8 if(v1 < v2) return "es menor";
9 if(v1 > v2) return "es mayor";
10 return "son iguales";
11 }
12 int main()
13 {
14 int num1=10, num2=15;
15 cout << "El numero " << num1 << " es "
16 << comparar(num1,num2) << " que " << num2 << endl;
17 cout << "--------------------------" << endl;
18
19 char car1='X', car2='B';
20 cout << "El caracter " << car1 << " es "
21 << comparar(car1,car2) << " que " << car2 << endl;
22 cout << "--------------------------" << endl;
23
24 float f1=1234.567, f2=8765.4321;
25 cout << "El numero " << f1 << " es "
26 << comparar(f1,f2) << " que " << f2 << endl;
27 cout << "--------------------------" << endl;
28
29 return 0;
30 }
Listado 12.2.1. [Link]
1 #include <iostream>
2 #include "MinMax.h"
3 using namespace std;
4 /* Plantillas parámetros */
5 int main()
6 {
7 int n1=123, n2= 345;
8 double d1 = 123.456, d2=345.321;
9
10 cout << "El numero entero mayor entre " << n1
11 << " y " << n2 << " es " << maximo(n1,n2) << endl;
12 cout << "El numero entero menor entre " << n1
13 << " y " << n2 << " es " << minimo(n1,n2) << endl;
14 cout << "------------------" << endl;
15
16 cout << "El numero doble mayor entre " << d1
17 << " y " << d2 << " es " << maximo(d1,d2) << endl;
18 cout << "El numero doble menor entre " << d1
19 << " y " << d2 << " es " << minimo(d1,d2) << endl;
20 cout << "------------------" << endl;
21 return 0;
22 }
Listado 12.3.1. [Link]
1 #ifndef _MAXMIN_
2 #define _MAXMIN_
3
4 template <typename T>
5 T maximo(T a, T b){ return (a>b)? a : b; }
6 template <typename T>
7 T minimo(T a, T b){ return (a<b)? a : b; }
8 #endif
Listado 12.3.2. MinMax.h
1 #include <iostream>
2 #include <cstdlib>
3 #include <ctime>
4 using namespace std;
5
6 #define MAX 100
7 #define randomize (srand(time(NULL)))
8 #define random(num) (rand()%num)
9
10 template <typename T> void intercambiar(T &v1, T &v2){
11 T temp;
12 temp = v1;
13 v1 = v2;
14 v2 = temp;
15 }
16 template <typename T> void ordenar(T *v, int n){
17 for (int intervalo = n/2; intervalo > 0; intervalo /= 2){
18 for (int i = intervalo; i < n; i++)
19 {
20 for (int j = i-intervalo; j>=0 && v[j+intervalo]<v[j];j-=intervalo)
21 {
22 intercambiar(v[j],v[j+intervalo]);
23 }
24 }
25 }
26 }
27 /*
28 Plantillas parámetros
29 */
30 int main()
31 {
32 int i, enteros[10];
33 string dias[7] = {"Lunes", "Martes", "Miercoles",
34 "Jueves", "Viernes", "Sabado", "Domingo"};
35
36 randomize;
37 cout << "Antes de ordenar" << endl;
38 for (i = 0; i < 10; ++i)
39 {
40 enteros[i] = random(MAX);
41 cout << enteros[i] << " ";
42 }
43
1 #include <iostream>
2 using namespace std;
3 /*Plantillas clases*/
4 template <class T> class MaxMin{
5 private:
6 T n1,n2;
7 public:
8 MaxMin(T v1, T v2):n1(v1), n2(v2) {}
9 T mayor();
10 T menor();
11 };
12 template <class T>
13 T MaxMin<T>::mayor(){ return (n1>n2)? n1:n2; }
14
15 template <class T>
16 T MaxMin<T>::menor(){ return (n1<n2)? n1:n2; }
17
18 int main()
19 {
20 MaxMin<int> miMaxMin(43,50);
21 MaxMin<float> floatMaxMin(1234.5678,6543.321);
22
23 cout << "El numero mayor es " << [Link]() << endl;
24 cout << "El numero menor es " << [Link]() << endl;
25 cout << "----------------------------" << endl;
26 cout << "El numero mayor es " << [Link]() << endl;
27 cout << "El numero menor es " << [Link]() << endl;
28 cout << "----------------------------" << endl;
29 return 0;
30 }
Listado 12.5.1. [Link]
1 #include <iostream>
2 #include "Pila.h"
3 using namespace std;
4 /*
5 Plantillas archivos de encabezado
6 */
7
8 int main()
9 {
10 Pila <int> pilaEnteros(10);
11
12 [Link](90);
13 [Link](77);
14 [Link](10);
15
16 cout << "Numero de elementos: " << [Link]() << endl;
17
18 cout << "Eliminamos el elemento " << [Link]()
19 << " de la pila" << endl;
20 cout << "Eliminamos el elemento " << [Link]()
21 << " de la pila" << endl;
22 cout << "Eliminamos el elemento " << [Link]()
23 << " de la pila" << endl;
24
25 cout << "Numero de elementos: " << [Link]() << endl;
26 return 0;
27 }
Listado 12.6.1. [Link]
1 #ifndef _PILA_
2 #define _PILA_
3 template <class T>
4 class Pila{
5 public:
6 Pila();
7 Pila(const unsigned n);
8 ~Pila();
9 void push(const T &x);
10 T pop();
11 int numElementos();
12 private:
13 unsigned max;
1 #include <iostream>
2 #include "Pila.h"
3 using namespace std;
4 /*
5 Plantillas archivos de encabezado
6 */
7
8 int main()
9 {
10 Pila <int> pilaEnteros(10);
11
12 [Link](90);
13 [Link](77);
14 [Link](10);
15
16 cout << "Numero de elementos: " << [Link]() << endl;
17
18 cout << "Eliminamos el elemento " << [Link]()
19 << " de la pila" << endl;
20 cout << "Eliminamos el elemento " << [Link]()
21 << " de la pila" << endl;
22 cout << "Eliminamos el elemento " << [Link]()
23 << " de la pila" << endl;
24
25 cout << "Numero de elementos: " << [Link]() << endl;
26
27 cout << "-------------------" << endl;
28
29 Pila <double> pilaDobles(10);
30
31 [Link](90.99);
32 [Link](100.77);
33 [Link](234.10);
34
35 cout << "Numero de elementos: " << [Link]() << endl;
36
37 cout << "Eliminamos el elemento " << [Link]()
38 << " de la pila" << endl;
39 cout << "Eliminamos el elemento " << [Link]()
40 << " de la pila" << endl;
41 cout << "Eliminamos el elemento " << [Link]()
42 << " de la pila" << endl;
43
44 cout << "Numero de elementos: " << [Link]() << endl;
45
46 cout << "-------------------" << endl;
1 #ifndef _PILA_
2 #define _PILA_
3 template <class T>
4 class Pila{
5 public:
6 Pila();
7 Pila(const unsigned n);
8 ~Pila();
9 void push(const T &x);
10 T pop();
11 int numElementos();
12 void mostrar();
13 private:
14 unsigned max;
15 unsigned top;
16 T *valor;
17 };
18 /* Implementacion */
19 template <class T>
20 Pila<T>::Pila(): max(100), top(0), valor(new T[max]){}
21
22 template <class T>
23 Pila<T>::Pila(const unsigned n):
24 max(n), top(0), valor(new T[max]){}
25
26 template <class T>
27 Pila<T>::~Pila(){
28 delete []valor;
29 }
30
1 #include <iostream>
2 #include "Pila.h"
3 #include "Complejo.h"
4 using namespace std;
5 /*
6 Plantillas archivos de encabezado
7 */
8
9 int main()
10 {
11 Pila <Complejo> pilaComplejos(10);
12 Complejo complejo;
13
14 [Link](Complejo(20,40));
15 [Link](Complejo(10,-40));
16 [Link](Complejo(30,-90));
17
18 cout << "Numero de elementos " << [Link]()
19 << endl;
20
21 complejo = [Link]();
22 cout << "Eliminamos el elemento " << [Link]() << ","
23 << [Link]() << " de la pila." << endl;
24
25 complejo = [Link]();
26 cout << "Eliminamos el elemento " << [Link]() << ","
27 << [Link]() << " de la pila." << endl;
28
29 complejo = [Link]();
30 cout << "Eliminamos el elemento " << [Link]() << ","
31 << [Link]() << " de la pila." << endl;
32
33 cout << "Numero de elementos " << [Link]()
34 << endl;
35
36 return 0;
37 }
Listado 12.8.1. [Link]
1 #ifndef _PILA_
2 #define _PILA_
3 template <class T>
4 class Pila{
1 class Complejo{
2 public:
3 Complejo(const double r=0, const double i=0):
4 real(r), imaginario(i) {};
5 double getR() const;
6 double getI() const;
7 void setR(const double);
8 void setI(const double);
Indice