Inicio C++
Inicio C++
#include <iostream>
using namespace std;
int main(){
return 0;
}
OPERADORES LÓGICOS
&& <- AND
|| <- OR
! <- NOT
IF ELSE AND SWITCH
HACER COMENTARIOS
Podemos hacer comentarios de un solo renglón como este:
//comentario auhigaxuhwc
Pero podemos hacer comentarios de varias líneas de otra forma:
/*
Comentario
Sjdohweoihfcpoajdckq
D´cOHQEIFCIPewhvowev ´p whv
*/
INCLUDE
Es una directiva que nos ayudará a incluir declaraciones de otros ficheros en la compilación.
#include <nombre de la librería > Para incluir librerías que ya están en el sistema
#include “nombre de la libreria”> Va a buscar la carpeta donde esté nuestro archivo
DEFINE
Permite que hagamos operaciones con un identificador y una secuencia que declaremos, es
decir podemos sustituir operaciones con esta macro.
Otros ejercicios
DO WHILE
Son bucles donde la condición se evalúa al final, es decir que mínimo se hace una vuelta.
ARRAYS
Son espacios que se dividen para almacenar muchas variables.
Se empiezan a contar las posiciones por 0, por ejemplo la frase: Hola mundo
Se guardarían las letras y espacios por separado tal que así:
H0
O1
L2
A3
4
M5
U6
N7
D8
O9
Búsqueda binaria
Es otra forma de buscar datos en arreglos pero más efectiva y para datos que estén en orden.
La diferencia es que aquí crea otras variables, como sup, inf y mitad , para ir almacenando el
número en mitad y vaya comparando con el dato. En este caso para terminar con el ciclo
tenemos que escribir break para que no haya un ciclo infinito.
ESTRUCTURAS
Son un tipo de datos complejo, puede almacenar un numero ordenado de variables, como un
bloque.
A diferencia de los arreglos, en las estructuras son variables independientes.
Ej:
Struct pokemon{
Char nombre[50];
Char tipo[50];
Float peso;
Char genero;
}pokemon1,pokemon2,pokemon3;
Es de decir que en una estructura creamos variables de distintos tipos pero también unas
variables principales que me indican cuantas veces voy a usar la estructura.
Plantillas de función
Las plantillas de función me servirán cuando quiera generar un dato de tipo genérico.
Para la plantilla de función se escribe “template <class nombre>”, en este caso le asignamos
el nombre “TIPOD”. Una vez declarado el template, se puede escribir la función void, y la
declaramos como siempre, la única diferencia es que en lugar de poner el tipo de dato
escribimos el nombre de la calse del template “TIPOD” y ya el nombre que le queramos dar
al dato.
Las funciones siempre se declaran antes de la función principal, y se expresan después de la
función principal, y para ejecutarla solo tengo que escribir el nombre de la función y entre
paréntesis,el dato que quiero introducir.
EJERCICIO
Escribe una plantilla de función llamada máximo(), que devuelva el valor máximo
de tres argumentos, que se transmitan a la función cuando sea llamada.Suponga
que los tres argumentos sean del mismo tipo de dato.
Para resolver este ejercicio he creado una plantilla de función, cuya clase se llama TIPOD.
Después he creado la función máximo tal como me piden pero claro, me pide que la función
devuelva un valor así que no puede ser void, pero tampoco puede ser entero o flotante
porque no sé de que tipo de dato se trata, para resolver eso pongo el mismo nombre de la
clase como tipo de dato,para crear una función que retorne, sin especificar el tipo, gracias a
mi comodín de la plantilla. Después de la función principal determino mi función máximo y
creo una escalera de ifs comparando los datos y escribiendo en cada caso cual sería mayor, y
devolviendo como me pide el ejercicio el dato mayor. Una vez terminada la función máximo
vamos a la principal y declaramos variables de distinto tipo, números enteros, flotantes,
dobles, y una cadena de texto, y tras declararlas y apodría utilizar mi función, no obstante,
cuando se trata de funciones que retornan valores no puedo escribir :
máximo(num1,num2,num3); porque esto solo sirve para funciones tipo void. En el caso de
querer ejecutar mi función debo llamarla con un “cout” o con una variable que cree
previamente, por ejemplo en cada tipo d edato creo una variable llamada
maxnum,maxflot,maxdob,maxstring y luego pongo:
Maxnum = máximo(num1,num2,num3);
O en el caso que se nos presenta abajo, con un simple cout:
Cout<<máximo(num1,num2,num3);
PASO DE PARÁMETROS POR REFERENCIA:
Arriba tenemos dos funciones tipo void que crean valores enteros ‘x’ y que después igualan a
3 dentro de la función, sin embargo cuando yo creo una variable entera en la función
principal, le doy de valor 17 y ejecuto las dos funciones en a, me desplazan valores distintos:
17 y 3.
¿Por qué ocurre esto? Simplemente en la función void modificado (int &x) añadimos algo
nuevo y es el carácter “&”, esto nos indica que no se crea una nueva variable si no que nos
vamos al espacio designado en memoria para esa variable, en este caso la ‘a’, la función se
dirige al espacio en memoria a que pone 17 y después lo corrige y pone que a vale 3. En la
segunda función creamos el espacio llamado x, además de tener el de a y le cambiamos el
valor de x a 3.
Es decir, en resumen, en la que utilizamos ‘&’ le cambiamos el valor y en la otra no, porque
una va al espacio donde se encuentra, y en la otra crea otro espacio.
PARÁMETROS EN VECTOR
Se trata de introducir arreglos o vectores en las funciones. La forma de escribir estas sería:
void nombreFuncion (tipoDato nombreArreglo[],tipoDato tamañoArreglo);
Es importante que los corchetes estén vacíos. Después de solo haría falta declarar en la
función principal el contenido del arreglo y el tamaño. Este sería un ejemplo:
Se hacen 2 funciones porque las funciones deben encargarse solo de un proceso.
¿Por qué es una función recursiva? Porque dentro de la función factorial se vuelve a llamara
a sí misma de nuevo.
ARREGLOS Y PUNTEROS
ARREGLOS DINÁMICOS
Se trata de crear arreglos en los que solo se reservan los bytes solicitados. Por ejemplo, creo
un arreglo pero no sé cuantos datos va a introducir el usuario, entonces utilizo el operador
“new” para reservar solo los necesarios, y el operador “delete” para borra esos bytes
reservados cuando haya finalizado. Para utilizar estos operadores es necesario escribir la
librería; #include <stdlib.h>
Suele utili
zarse con punteros.
Ejercicio contar vocales
2.Inicializar el constructor
Para inicializar el constructor, igualamos la clase al constructor, y en esta ocasión en lugar de
poner solo los tipos de variable, las nombro de nuevo, para igualar las variables ya creadas
con los nuevos nombres del constructor.
Por último escribimos la función que hayamos incluido y le indicamos que acci´n llevar a
cabo, como mostrar un mensaje.
3.Declarar objetos
Ya tenemos las variables, ahora solo falta darles valor, creando un objeto, por ejemplo
pokemon1 , y entre paréntesis colocamos los datos en orden.
Para ver que funciona escribimos el nombre del objeto,un “.” Y el nombre de la función que
he creado y que me debe mostrar el mensaje.
Clase hija
Se repite el mismo proceso pero esta vez se iguala a la clase madre, a la hora de declararla
como a la hora de inicializarla para no repetir las mismas variables.
Polimorfismos
Se trata de invocar métodos de clases sin realizar la misma acción.
En lugar de crear otra función, volvemos a utilizar la misma, la diferencia es que cuando
inicializamos la función tenemos que poner el nombre de la función padre e igualarla a la
función, por ejemplo pokemon::Saludo();
Pero hay otras formas de polimorfismo, por ejemplo en algunos casos para indicar que una
función va a tener polimorfismo se escribe la palabra virtual,pero solo en la clase padre. Ej:
virtual void Saludo();
Constructores
Los constructores son necesarios, pero…¿Solo podemos tener uno? La respuesta es no,
podemos tener tantos constructores como queramos, para introducir por ejemplo los atributos
de forma diferente.
En este caso creamos un constructor que permita que introduzcamos el tiempo solo en
segundos, y lo muestre en horas, minutos y segundos.
Destructores
Sirven para destruir objetos y se escriben así: ~nombreClase();
Y ya estaría creado nuestro destructor sin necesidad de escribir nada más.
Getters y Setters
Setters
Son funciones que me permiten modificar atributos que están encapsulados en una clase
privada, en el momento que quiera <- void setClase(tipoDato);
Después tendré que inicializarla como los constructores, ya que es una función.
Void Clase::setClase(tipoDato _variable){
Variable = _variable;
}
Y ya teniendo esa función puedo cambiar el valor de mis variables siempre que quiera
creando un objeto tal que así:
Clase1.setClase(a,b); por ejemplo, todo esto en mi función principal.
Getters
Son funciones que me envían un dato que está encapsulado en una clase privada, es decir me
lo consigue.
Se declara junto a los métodos y se pone <- pongamos que quiero la variable x y que esta en
una letra char getClasex();
Se pone el tipo de variable que quiero fuera, y ya después el get y el nombre de la calse y la
variable.
Se inicializa poniendo <- int Clase::getClasex(){
Return x;
}
Y ya en la función principal se escribe <- clase1.getClasex();