Curso de C++ Básico. Programación Orientada a Objetos [Parte 2]

Valeo08

Capullo perro no mucho
Miembro del equipo
Moderador
Noderador
Nodero
Noder
Antes de empezar, me gustaría recomendar algunos IDEs para practicar
la programación en C++. Os nombro los que utilizan en la UNI que son DevCPP
o Codeblocks, ambos son libres así que se pueden descargar fácilmente.

Aquí van los links para ahorrar la búsqueda:
-> DevCPP
-> Codeblocks


------------------------------------------------------------------------------------------------------------------------------
2. Algoritmos. Variables. Tipos de Datos. Operadores. Funciones
------------------------------------------------------------------------------------------------------------------------------

2.1. Algoritmos
Un Algoritmo es una serie ordenada de acciones que se deben llevar a cabo
para conseguir una solución correcta a un problema en un período de tiempo
finito.

De esta forma, un programa también se puede definir como un algoritmo
escrito en un lenguaje de programación.

La estructura general de un programa escrito en C++ se
parece a algo como esto:



2.2. Palabras reservadas. Indentificadores. Variables
Las Palabras Reservadas son aquellas utilizadas en un lenguaje de
programación para que el compilador/intérprete sepa que operación
debe realizar en una determinada situación.

Algunas palabras reservadas de C++ son: class, for, while, public,
delete, new...

Un Identificador es una "palabra", por así decirlo, con la que podemos
nombrar a una variable, una función, un método, una clase o una constante.
El lenguaje C++ distingue entre mayúsculas y minúsculas por ello: dinero,
Dinero o DINERO definen identificadores distintos y se refieren a cosas
diferentes.

Las Constantes son zonas de memoria cuyo valor NO se puede modificar
durante la ejecución de un programa. Existen varias formas de definir una
constante:

C++:
const int k = 12;

#define pi 3.14159

Hay que tener en cuenta que en esta última forma, la constante se establece
con el nombre después del "define" y el valor inmediantamente detrás de él.
Por ello no se debe poner ni el tipo de dato ni un " = " para establecer
su valor.

Las Variables son zonas de memoria cuyo valor sí se puede modificar durante
la ejecución del programa. La sintaxis para declarar variables es así:

Nombre_de_tipo Nombre_1, Nombre_2 ... ;

Un ejemplo:



Los Comentarios son líneas de un programa que el traductor ignora a la
hora de convertir el código fuente a lenguaje máquina. Por lo tanto son
útiles para dejar notas de que hace una parte del código o cómo se debe
continuar. Cuando trabajas en equipo tampoco está de más explicar a tus
compañeros que hace cada parte del programa.

Un ejemplo tanto de un comentario simple como uno múltiple:



Para comentar una línea se coloca " // " antes de empezar a escribir el
comentario. Si quieres comentar varias líneas seguidas se coloca " /* " donde
empieza el comentario y " */ " donde termina.

2.3. Tipos de Datos

2.3.1. Tipo entero

Equivale a un número entero sin decimales. Se declara así:

int a, b, c;

El mayor y menor número que puede almacenar depende del tamaño del
espacio usado por el dato.

Si ocupa 2 bytes -> entre -32768 y +32767
Si ocupa 4 bytes -> entre -2147483648 y +2147483647

También es posible definir un entero de esta forma:

unsigned int a, b, c;

De este modo declaramos ese entero sin signo, con lo que almecenará
de 0 a 65535 si ocupa 2 bytes o de 0 a 4294967295 si opcupa 4 bytes.

Existe el tipo "long", que es un entero largo, cuyo tamaño es el doble
que el de un entero normal.

long x, y, z;

Las posibles operaciones con este tipo de dato son:

-> Suma ( + )
-> Resta ( - )
-> Multiplicación ( * )
-> Cociente ( / )
-> Módulo, que equivale a calcular el resto de una división ( % )


Esta parte se divide ya que hay un límite para los post. Sigo abajo.
 
Última edición:

Valeo08

Capullo perro no mucho
Miembro del equipo
Moderador
Noderador
Nodero
Noder
2.3.2. Tipo real
Se utiliza para los números con decimales. De hecho, hay dos tipos de
datos para los decimales:

-> El tipo "float": float a;
Sus valores oscilan entre -3.4*10^38 hasta -3.4*10^-38 y
desde 3.4*10^-38 hasta 3.4*10^38.

-> El tipo "double": double b;
Se le suele denominar decimal con más precisión. Sus valores van
desde -1.79*10^308 hasta -1.79*10^-308 y desde 1.79*10^-308
hasta 1.79*10^308.

Las operaciones con las variables de tipo real son:

-> Suma ( + )
-> Resta ( - )
-> Multiplicación ( * )
-> División ( / )

Hay varias cosas a tener en cuenta cuando se trabajan con variables de
tipo real. La primera es que se utiliza el punto(.) y no la coma(,) para
establecer los decimales. La segunda trata sobre la notación científica,
que para C++, se puede utilizar siguiendo algunas pautas. Por
ejemplo: 1.456e10 expresaría en realidad el valor 14 560 000 000 (Hay que
poner la "e" pegada al número).

2.3.3. Tipo carácter
En este tipo de dato se almacena el código ASCII que corresponde al
carácter que representa. Se declara así:

char c;
char c = 'a';
char c = 97;


Si quieres representar, por ejemplo, el carácter H (mayúscula), debes
asignárselo a la variable entre comillas simples, aunque también puedes
hacerlo indicando el número de la tabla ASCII que corresponda a la H.

2.3.4. Tipo Enumerado (En desuso)
Se declara de este modo:
enum nombre_tipo { definición de las constantes con sus nombres };

Por ejemplo, para declarar un mes lo haríamos así:

C++:
enum mes { enero, febrero, marzo, abril, ...};

mes esteMes;
esteMes = enero;
Es importante no confundir este tipo de dato con las tablas o arrays, de hecho,
este tipo apenas se utiliza.

2.3.5. Tipo booleano
Como su nombre indica, se utiliza para almacenar un valor del álgebra de Boole,
es decir, verdadero (true) o falso (false). Se declara así:

bool b, d;
b = true;
d = false;

2.3.6. Tipos de datos estructurados
Esto lo explicaré más adelante, pero ya lo presento para que se vea la idea.

Los tipos de datos estructurados, están construidos a partir de los demás tipos
simples con las relaciones ya existentes entre ellos. Existen varios subtipos
que se ordenan según sean estructuras estáticas o dinámicas (Sólo voy a mostrar
y explicar las estructuras estáticas ya que son las más básicas y adecuadas
para este nivel). Además dentro de esta clasificación se pueden separar en
homogéneas (las tablas o arrays) y heterogéneas (los registros o structs).

2.4. Operadores

2.4.1 Operador de asignación
Se representa con " = " y asigna el valor de la expresión de la derecha a la
variable de la izquierda. Se expresaría de este modo:
identificacdor_variable = expresión;

Ejemplo:
C++:
int dinero;
dinero = 10;
dinero = 10 / 2;
dinero = dinero + 4;

2.4.2. Operadores aritméticos

-> La suma ( + ), la resta ( - ), la multiplicación ( * ) y l
división ( / ), pueden operar con valores de tipo entero o real. Sin
embargo hay que tener cuenta, que con la división de enteros, el resto
se pierde. Por tanto, si hiciéramos la operación: 7 / 2, lo que
obtendríamos sería un 3 y se perdería el 0.5 del resto.

-> El módulo ( % ), sólo puede operar con el tipo entero, calculando
el resto.

-> Existen varios formas de operar con una variable como se indica
en la tabla siguiente:

operación ---> equivalencia:

-> x++; ---> x = x + 1;
-> ++x; ---> x = x + 1;
-> x--; ---> x = x - 1;
-> --x; ---> x = x - 1;
-> x += 3; ---> x = x + 3;
-> x -= 4; ---> x = x - 4;
-> x *= 5; ---> x = x * 5;
-> x /= 6; ---> x = x / 6;
-> a = b++; ---> a = b; b = b + 1;
-> a = ++b; ---> b = b + 1; a = b;
-> int a, b; a=b=5; ---> int a, b; a = 1; b = 1;

Una recomendación que daría cuando utilicéis este tipo de operadores es
que tengáis cuidado con lo que hagáis. Es mejor utilizar las equivalencias
de la tabla, si estás más seguro, que alguno de los operadores para
ahorrar líneas de código.

2.4.3. Operadores de relación o relacionales
El resultado de la operación a que representan es true si se cumple la relación
y false en caso contrario. Además sólo pueden operar con valores de tipo entero
o real. Existen todos estos operadores relacionales:

-> " == " igual
-> " != " distinto
-> -> " < " menor
-> " > " mayor
-> " <= " menor o igual
-> " >= " mayor o igual

2.4.4. Operadores lógicos
Si alguna vez habéis estudiado filosofía probablemente hayáis visto los operadores
lógicos, pues están basados en el Álgebra de Boole. Se utilizan para operar entre
valores de tipo booleano (bool). Hay tres:

-> " && " que equivale a AND
El resultado del operador es true si los dos operandos
son true, y false en caso contrario.
-> " || " que equivale a OR
El resultado será true si al menos un operando es true,
en caso contrario (si los dos son false), será false.
-> " ! " que equivale a NOT
Sólo opera con un valor. Niega el operando: el resultado es true,
si el operando es false, y false si es true.

2.4.5. Función cast (conversión explícita entre tipos)
Hacer un casting significa convertir en esa operación un tipo de dato
a otro distinto (si es posible). Para llevar a cabo la función cast, se coloca
delante de la expresión a convertir y entre paréntesis, el tipo al que se va a
convertir. Por ejemplo:

C++:
int a = 3;
float b;
a = a / 2;        // En este caso "a" sería 1
a = (float) a / 2;    // De esta forma "a" sería 1.5

2.5. Orden de precedencia entre operadores
Todos los operadores operan en un sentido determinado. El orden de
precedencia de los operadores es este:

operadores ----> operan en sentido:

-> !, ++, --, new, delete ---> de derecha a izquierda
-> *, /, % ---> de izquierda a derecha
-> +, - ---> de izquierda a derecha
-> <, <=, >, >= ---> de izquierda a derecha
-> ==, != ---> de izquierda a derecha
-> && ---> de izquierda a derecha
-> || ---> de izquierda a derecha
 
  • Like
Reacciones : destapeman y KTaneR

Valeo08

Capullo perro no mucho
Miembro del equipo
Moderador
Noderador
Nodero
Noder
2.6. Operaciones de entrada/salida básicas
Antes de explicar las funciones genéricas, voy a comentar algunas operaciones
de lectura y entrada que pueden ser útiles si quieres hacer programas
para la consola. Ya que es un curso básico, recomiendo crear en cualquier IDE
un archivo .cpp y comenzar a practicar con estas pautas.

Para empezar, si vamos a utilizar instrucciones de lectura de datos desde el
teclado y de salida por pantalla, es necesario que incluyamos en nuestro programa
una librería. Para incluir librerías hay que escribir:
#include <nombre_de_la_librería> // incluyendo los signos < >

En el caso de lectura/escritura, hay que incluir la librería "iostream" y establecer
el espacio de trabajo "standart", como en la siguientes líneas:

C++:
#include <iostream>
using namespace std;

Una vez incluida la librería ya se puede empezar a practicar con cin y cout dentro de
la función "main" u otras genéricas.

2.6.1. Lectura de datos
Para leer datos desde el teclado, utilizamos la función "cin" (console in), cuya
sintaxis es la siguiente:
cin >> identificador_variable;

Algunos ejemplos de la función cin:
C++:
int main () {
    int a, b;
    cin >> a;
    cin >> a >> b;
    cin >> a
           >> b;

    char c;
    cin >> c;

    char cadena[30];
    cin >> cadena;
  
    return 0;
}

2.6.2. Escritura de datos
Para sacar datos por pantalla en la consola, hay que utilizar la función
"cout" (console out), que se llama de la siguiente forma:
cout << expresion_a_sacar_por_pantalla;

Ejemplos de la función cout:
C++:
int main () {
    int entero1 = 3, entero2 = 2;
    cout << entero1;
    cout << entero1 * entero2;
    cout << "El valor del primero es: " << entero1;
    cout << "\n";
    cout << "La multiplicación es: \t" << entero1 * entero2;
    return 0;
}

Dentro del código anterior he incluído dos expresiones que tienen un significado
especial dentro de un "cout". La primera es "\n" es un "enter", es decir, es un
salto de línea, la segunda es "\t" que es equivalente a pulsar el tabulador,
añade ocho espacios a la salida.

2.7. Funciones y Métodos

2.7.1. Funciones Genéricas

Una Función es una serie de declaraciones de variables y sentencias que se emplea
con un determinado propósito.

La sintaxis de una función es:
tipo_devuelto identificador_funcion ( parámetros ) {
...
}


Los parámetros son opcionales (Ya explicaré lo que son).

Ejemplos:



Todo programa en C++, tiene una función "main" que es la única a la que llama
la CPU, es decir, es la única que ejecuta. Si quieres ejecutar una función genérica,
en principio, debe ser llamada dentro de main, ya sea asignándola a una variable o
sola, si devuelve "void".

* No he explicado el tipo void porque literalmente es nada, vacío. Cuando una función
"devuelve" el tipo void quiere decir que no hay que asignarla a ninguna variable ni
incluirla en ninguna expresión.

2.7.2. Métodos
Un Método es, por así decirlo, una función definida dentro de una clase. De igual forma,
un atributo es una variable definida en una clase. Como ejemplo, una clase sería así:



En la clase Vehículo, "avanzar" y "retroceder", serían dos métodos, y "tipo"
y "precio" dos atributos (He utilizado el mismo ejemplo que en la primera parte).

Dentro de la clase se distinguen dos zonas, una dentro de "private" y otra en "public". La
primera zona no hay que indicarla si no se quiere, ya que por defecto todos los atributos y
métodos de una clase son privados, es decir, no se puede acceder a ellos fuera de la clase.
Si intentáramos ver el valor de "precio" desde la función "main", no podríamos obtenerlo
directamente. De igual forma, todo lo contenido en "public" es accesible desde fuera de la
clase, no obstante, hay que tener en cuenta que son métodos, por lo que sólo pueden ser
llamados por objetos de esa clase.

La sintaxis de un método es la siguiente:
tipo_devuelto nombre_clase::nombre_metodo () {
...
}


Los métodos se declaran dentro de la clase, pero se escriben fuera,
es decir, dentro del clase escribes el identificador y el tipo del método,
pero lo desarrollas fuera de la misma:



Cuando quieres llamar a un método de un objeto, como sale en el ejemplo, hay
que escribir el nombre del objeto seguido de un punto y el nombre del método al
que quieres llamar.

* El operador de asignación se puede utilizar entre objetos de la misma clase,
es decir, si asignamos: objeto2 = objeto1; si son de la misma clase, los atributos
de "objeto2" ahora son los mismos que los de "objeto1". Un ejemplo de esto último:




Ya nos veremos noders, un saludo.
 
Última edición:

Arima

Miembro
Que alguien le ponga un whisky a este hombre, pago yo. Muy buen aporte, bien explicado y se nota el trabajo. Con ganas de seguir leyéndote noder.
 

Thegjv

Moder fav <3
Miembro del equipo
Moderador
Noderador
Nodero
Noder
Se han mantenido tus dos post a salvo, que genial!!
 

Anon

CEO de Nodo313 ⚡
Miembro del equipo
CEO
Staff
Vuelvo a entrar en este post para sorprenderme de que sigue vivo. Okay, this is epic.
 

qav

No soy el mejor mod, pero soy un excepcional pato
Miembro del equipo
Moderador
Noderador
Nodero
Noder
Hombre te esmeraste mucho al hacer estos post, te felicito y mis respetos
 

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
Echo en falta mas cosas como esta en este foro, deberiais intentar reenfocarlo un poco yo creo, pq esta lleno de script kiddies, y como dijo @destapeman este foro tiene mucho potencial para ser un sitio donde aprender muchas cosas sobre informatica.
 
  • Like
Reacciones : destapeman

destapeman

FUCK PUSSYS, YES BADASS
Miembro del equipo
Jinete de Nodo
Burgués de Nodo
Moderador
Noderador
Nodero
Noder
a ver, poco a poco, Roma no se construyó en una noche xDD

Por cierto, tome el puto Like y comentario para que se vea joder!!
 
  • Like
Reacciones : KTaneR
Arriba Pie