Universidad Central de Venezuela Facultad de Ciencias Escuela de Computación Algoritmos y Estructuras de datos. Taller #1. Guía básica de C++

Documentos relacionados
Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase al mismo tiempo que se declara.

Elementos de un programa en C

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

PROGRAMACION ORIENTADA A OBJETOS EN C++

Estructuras de Datos Declaraciones Tipos de Datos

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Programación estructurada (Introducción a lenguaje C)

LENGUAJE. Tema 2 Elementos de un programa

Programación Orientada a Objetos (POO)

Fundamentos de Programación 2017-I

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

5. Sentencias selectivas o condicionales

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Lección 2 Introducción al lenguaje C

GUÍA DE ESTILO EN JAVA

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Estructuras de Control 3

TEMA 4. ESTRUCTURAS DE CONTROL

Programación Estructurada

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Lenguajes de programación

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Programación. Test Autoevaluación Tema 3

El lenguaje C. 1. Identificadores, constantes y variables

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas

Estatutos de Control C# Estatutos de Decisión (Selección)

Fundamentos de Programación 2017-I

FUNDAMENTOS DE INFORMÁTICA

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

ANEXO XVII DE LA RESOLUCION N

Introducción a C++ y Code::Blocks

Curso de Programación Avanzada en C

Introducción al Lenguaje de Programación C

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Una declaración es simplemente una presentación, una definición contiene las instrucciones con las que realizará su trabajo la función.

Tema 3: Programación orientada a objetos (I)

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Fundamentos de programación

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

Tema 2. El lenguaje JAVA

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

Estructuras de Control

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

REFERENCIA DEL LENGUAJE

INTRODUCCIÓN AL LENGUAJE C++

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Principios de Computadoras II

ESCUELA DE INFORMÁTICA

Curso Introducción JAVA Pág.: 1

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT

Manual de turbo pascal

INICIACIÓN A LA PROGRAMACIÓN EN C

Estructuras de control

Fundamentos de Informática E.U.P. Universidad de Sevilla

fundamentos de programación (unidad 4) programación estructurada en Java

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

TIPOS DE DATOS BASICOS EN LENGUAJE C

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

PHP: Lenguaje de programación

Tema 13: Apuntadores en C

Las plantillas permiten definir funciones genéricas.

La sintaxis básica para definir una clase es la que a continuación se muestra:

Guía práctica de estudio 05: Diagramas de flujo

Programación En Lenguaje C

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

Clases en C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Algoritmos y Programación II. Enero de 2005

Java para programadores

Guía práctica de estudio 04: Clases y objetos

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Informática Ingeniería en Electrónica y Automática Industrial

Forma Básica Clase Java

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Introducción a las sentencias de control

CAPITULO 2. COMPRENDER LAS DEFINICIONES DE CLASE

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

CONCEPTOS BASICOS DEL LENGUAJE JAVA

INTRODUCCIÓN AL LENGUAJE C

Tema 3 Constantes, Variables y Tipos

Introducción al lenguaje C

4. Operadores Operador asignación

Programación I Unidad III. Tema: Tipos, estructuras y uniones

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Lenguaje de Programación

Tema 2. El lenguaje de programación Java (Parte 1)

Transcripción:

Taller #1 Guía básica de C++ 1. Tipos de Datos En el lenguaje C++ existen varios tipos de datos elementales y estructurados. También existen ciertos modificadores, que permiten ajustar ligeramente ciertas propiedades de cada tipo. A continuación se muestra una tabla con los tipos de datos elementales con algunos modificadores. Tipo de Dato Descripción Modificadores char Carácter (8 bits) signed char (8 bits) unsigned char(8 bits) int Entero Simple (32 bits) unsigned int (32 bits) long int (32 bits) unsigned long int (32 bits) signed long int (32 bits) short int (16 bits) unsigned short int (16 bits) signed short int (16 bits) float Punto flotante (32 bits) double Punto flotante (64 bits) long double (80 bits) bool Valor booleano: true o false wchar _t Caracteres anchos para determinados juegos de caracteres void Vacío i. Cómo se declara una variable en C++? Para declarar una variable de tipo elemental, basta con indicar el tipo de dato y el identificador asociado. Opcionalmente, se coloca el modificador a utilizar. Su sintaxis es: [modificador] <tipo de dato> <identificador>; en donde:

[modificador] es el modificador (especifica si acepta valores con signo o sin signo) <tipo de dato> es el tipo de dato de la variable <identificador> es la palabra que identifica a la variable La sintaxis para declarar arreglos (tipo de dato estructurado) es la siguiente: [modificador] <tipo de dato> <identificador>[tamaño]; Donde [tipo de dato] es el tipo de dato base, [tamaño] especifica la cantidad de elementos del arreglo. Es importante destacar que en C/C++ los arreglos son accedidos desde la primera casilla (posición 0) hasta la última posición (tamaño -1). 2. Estructuras de control i. Ciclos Estos tipos de sentencias son el núcleo de cualquier lenguaje de programación, y están presentes en la mayor parte de ellos. Nos permiten realizar tareas repetitivas, y se usan en la resolución de la mayor parte de los problemas. b) Ciclo Mientras Es la sentencia de ciclo más sencilla, y sin embargo es tremendamente potente. En C++ se usa la palabra reservada while, y la sintaxis es la siguiente: while (<condición>){ <sentencia> La sentencia es ejecutada repetidamente mientras la condición sea verdadera. Si no se especifica condición se asume que es true, y el ciclo se ejecutará indefinidamente. Si la primera vez que se evalúa la condición resulta falsa, la sentencia no se ejecutará ninguna vez. c) Ciclo Repetir...Hasta Esta sentencia va un paso más allá que el while. La sintaxis es la siguiente: do { <sentencia> while (<condición>);

La sentencia es ejecutada repetidamente mientras la condición resulte verdadera. Si no se especifica condición se asume que es true, y el ciclo se ejecutará indefinidamente. A diferencia del ciclo while, la evaluación de la condición se realiza después de ejecutar la sentencia, de modo que ésta se ejecutará al menos una vez. d) Ciclo Para...Hasta Por último el ciclo para, que usa la palabra reservada for. Este tipo de ciclo es el más elaborado. La sintaxis es: for ([<inicialización>]; [<condición>] ;[<incremento>]){ <sentencia>; La sentencia es ejecutada repetidamente mientras la condición resulte verdadera, o expresado de otro modo, hasta que la evaluación de la condición resulte falsa. Antes de la primera iteración se ejecutará la iniciación del ciclo, que puede ser una expresión o una declaración. En este apartado se suelen iniciar las variables usadas en el ciclo. Estas variables también pueden ser declaradas en este punto, pero en ese caso tendrán validez (ámbito) sólo dentro del ciclo for. Después de cada iteración se ejecutará el incremento de las variables del ciclo. Este incremento también es una sentencia de asignación, y no tiene por qué ser necesariamente un incremento. En general, podemos considerar que la parte de inicialización establece las condiciones iniciales del ciclo, la parte de la condición establece la condición de salida, y la parte del incremento, modifica las condiciones iniciales para establecer las de la siguiente iteración del ciclo, o para alcanzar la condición de salida. i. Selección simple Permite la ejecución condicional de una sentencia. Sintaxis: if (<condición>) { <sentencia1> else { <sentencia2>

Si la condición es verdadera se ejecutará la sentencia1, si es falsa, (y si existe la parte del else), se ejecutará la sentencia2. La claúsula else es opcional, y si se usa, no pueden insertarse sentencias entre la sentencia1 y el else. ii. Selección múltiple Esta sentencia es una generalización de las sentencias if...else. En el caso de las sentencias if, la expresión que se evalúa como condición es booleana, lo que quiere decir que sólo hay dos valores posibles, y por lo tanto, sólo se puede elegir entre dos sentencias a ejecutar. En el caso de la sentencia switch, la expresión a evaluar será entera, por lo tanto, el número de opciones es mucho mayor, y en consecuencia, también es mayor el número de diferentes sentencias que se pueden ejecutar. Sintaxis: switch (<expresión entera>) { [case <expresión_constante 1 >: [<sentencias 1 >]] [case <expresión_constante 2 >: [<sentencias 2 >]]... [case <expresión_constante n >: [<sentencias n >]] [default : [<sentencia>]] Esta característica también nos permite ejecutar las mismas sentencias para varias etiquetas distintas, y en el apartado siguiente veremos que se puede eludir la ejecución secuencial normal usando la sentencia de ruptura break para ejecutar sólo parte de las sentencias. Si el valor de la expresión entera no satisface ningún case, es decir, si no existe un case con una expresión constante igual al valor de la expresión entera, el control parará a la sentencia etiquetada con la etiqueta default. Todas las etiquetas son opcionales, tanto default como todos los case. Si no se satisface ningún case, ni aparece la etiqueta default, se abandonará la sentencia switch sin ejecutar ninguna sentencia. Por ejemplo:

bool EsVocal; char letra; switch(letra) { case 'a': case 'e': case 'i': case 'o': case 'u': EsVocal = true; break; default: EsVocal = false; Universidad Central de Venezuela En este ejemplo letra es una variable de tipo char y EsVocal de tipo bool. Si el valor de entrada en el switch corresponde a una vocal, EsVocal saldrá con un valor verdadero, en caso contrario, saldrá con un valor falso. El ejemplo ilustra el uso del break. Si por ejemplo, letra contiene el valor 'a', se cumple el primer case, y la ejecución continúa en la siguiente sentencia: EsVocal = true, ignorando el resto de los case hasta el break, que nos hace abandonar la sentencia switch. 3. Funciones en C++ Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman ciertos valores de entrada, llamados parámetros y proporcionan un valor de salida o valor de retorno; aunque en C++, tanto unos como el otro son opcionales, y pueden no existir. i. Prototipos de funciones En C++ es obligatorio usar prototipos. Un prototipo es una declaración de una función. Consiste en una presentación de la función, exactamente con la misma estructura que la definición, pero sin cuerpo y terminada con un ";". La estructura de un prototipo es: <tipo_valor_retorno> <identificador>(<lista_parámetros>); En general, el prototipo de una función se compone de las siguientes secciones: <tipo_valor_retorno> es el tipo del valor de retorno, que puede ser void, si no necesitamos valor de retorno. En C, si no se establece, será int por defecto, aunque en general se considera una mala técnica de programación omitir el tipo de valor de retorno de una función. En C++ es obligatorio indicar el tipo del valor de retorno. <identificador> es el identificador de la función. Lo ideal sería colocar un nombre nemotécnico, es decir, un nombre que indique, lo más claramente posible, qué es lo que

hace la función, y que permitan interpretar qué hace el programa con sólo leerlos. Esto resultará una práctica muy útil y recomendable. <lista_parámetros> especifica los valores de entrada (y en ocasiones también de salida) de una función. Para la función se comportan exactamente igual que variables, y de hecho cada parámetro se declara igual que una variable. Una lista de parámetros es un conjunto de declaraciones de parámetros separados con comas dentro de un par de paréntesis. Puede tratarse incluso de una lista vacía. Por ejemplo: int Mayor(int a, int b); Un prototipo sirve para indicar al compilador los tipos de retorno y los de los parámetros de una función, de modo que compruebe si son del tipo correcto cada vez que se use esta función dentro del programa, o para hacer las conversiones de tipo cuando sea necesario. ii. Definición de funciones Al igual que hemos visto con las variables, las funciones deben declararse, para lo que usaremos los prototipos, pero también deben definirse. Una definición contiene además las instrucciones con las que la función realizará su trabajo, es decir, su código. La sintaxis de una definición de función es: <tipo_valor_retorno> <identificador>(<lista_parámetros>) { [Código de la función] La sintaxis es idéntica a la del prototipo, salvo que se elimina el punto y coma final, y se añade el cuerpo de función que representa el código que será ejecutado cuando se llame a la función. El cuerpo de la función se encierra entre llaves "{". Una función muy especial es la función main. Se trata de la función de entrada, y debe existir siempre, ya será la que tome el control cuando se ejecute el programa. Existen varias maneras de definir la función main. Una de ellas no utiliza parámetros de entrada y retorna un valor entero que indicará si el programa ha terminado sin novedad ni errores retornando cero, cualquier otro valor de retorno indicará un código de error. Su sintaxis es la siguiente:

int main() { [Código...] return 0; iii. Estructura de un programa C++ En resumen, la estructura de un programa en C++ quedaría así: [directivas del pre-procesador: includes y defines] [declaración de variables globales] [prototipos de funciones] [declaraciones de clases] función main [definiciones de funciones] [definiciones de clases] También se puede omitir el prototipo si se hace la definición antes de cualquier llamada a la función, es decir, en la zona de declaración de prototipos. Los programas complejos se escriben normalmente usando varios archivos fuente. Estos archivos se compilan separadamente y se enlazan todos juntos. Esto es una gran ventaja durante el desarrollo y depuración de grandes programas, ya que las modificaciones en un archivo fuente sólo nos obligarán a compilar ese archivo fuente, y no el resto, con el consiguiente ahorro de tiempo. 4. Entrada/Salida En C++, la biblioteca que maneja la entrada y salida es iostream. Sin embargo, siempre es posible usar la biblioteca de C cstdio para realizar dichas tareas. Es importante saber en qué se diferencian y cuándo debemos usar una y no otra. La biblioteca iostream de C++ nos permite realizar lecturas/escrituras de forma más versátil, pues no es necesario especificar el tipo de dato al momento de hacer la lectura o escritura. Por ejemplo, para leer cualquier variable de tipo T, se puede usar el siguiente código: T x ; cin >> x ;

Para realizar escrituras, es muy similar: T x = T(); cout << x; Universidad Central de Venezuela Tanto cin como cout, saben el tipo de dato de x y lo manejan de la forma apropiada. Sin embargo, si se usa cstdio para realizar entrada/salida, se debe ser mas concreto con el tipo de dato que se lee. El siguiente ejemplo lee un entero: int x; scanf("%d", &x); Lo que encierran las comillas en el scanf determina el patrón de lo que se va a leer. Para cada tipo de datos existe un patrón: %d para int %f para float %s para char * o char[ ] %lf para double %c para char De igual forma, estos patrones aplican para cuando se quiere escribir. El siguiente ejemplo imprime dos números reales con dos y tres decimales respectivamente: float x = 9.088494f, y = 7.4493f; printf("%.2f %.3f", x, y); Algo que se debe considerar al momento de escoger usar uno u otro método para leer y escribir es la velocidad. En este sentido, la biblioteca de C otorga mucho mejor rendimiento en tiempo que la de C++, siendo, en algunos casos, la diferencia entre un problema aceptado y uno rechazado por exceso de tiempo.

5. Programación Orientada a Objetos La Programación Orientada a Objetos (POO) es un paradigma de programación el cual se encarga de agrupar los datos y los procedimientos con la finalidad de manejarlos en una única entidad: el objeto 1. Las características más importantes que contempla la POO son las siguientes: Abstracción, Encapsulamiento, Modularidad, Polimorfismo y Herencia. En C++, un objeto es sólo una instancia de una clase determinada. Es importante distinguir entre objetos y clases, la clase es simplemente una declaración, no tiene asociado ningún objeto, de modo que no puede recibir mensajes ni procesarlos, esto únicamente lo hacen los objetos. i. Declaración de una clase La primera palabra que aparece es lógicamente class que sirve para definir una clase y para declarar objetos de esa clase. class <identificador de clase> [<:lista de clases base>] { <lista de miembros> ; en donde: <identificador de clase> es el identificador (nombre) de la clase <lista de miembros> será en general una lista de funciones y datos [<:lista de clases base>] se usa para derivar clases (véase Herencia) Los datos se declaran del mismo modo en que lo hacíamos hasta ahora, salvo que no pueden ser inicializados. ii. Especificadores de acceso Dentro de la lista de miembros, cada miembro puede tener diferentes niveles de acceso. Existen 3 niveles de acceso en C++: public, private y protected. Los miembros privados de una clase sólo son accesibles por los propios miembros de la clase y en general por objetos de la misma clase, pero no desde funciones externas o desde funciones de clases derivadas. Cualquier miembro público de una clase es accesible desde cualquier parte donde sea accesible el propio objeto. Con respecto a las funciones protegidas, es equivalente al acceso privado, pero con respecto a las clases derivadas se comporta como público. 1 POO: http://es.wikipedia.org/wiki/programaci%c3%b3n_orientada_a_objetos

Cada una de éstas palabras, seguidas de ":", da comienzo a una sección, que terminará cuando se inicie la sección siguiente o cuando termine la declaración de la clase. Es posible tener varias secciones de cada tipo dentro de una clase. Si no se especifica nada, por defecto, los miembros de una clase son privados. Las funciones pueden ser simplemente declaraciones de prototipos, que se deben definir aparte de la clase pueden ser también definiciones. Cuando se definen fuera de la clase se debe usar el operador de ámbito "::". Veamos el ejemplo de la clase Carro: class Carro { private: // Datos miembro de la clase "Carro" float litrosgasolina; bool encendido; public: // Funciones miembro de la clase "Carro" void Apagar() void LlenarTanque(float cant); ; void Carro::Apagar(){ encendido = false; void Carro::LlenarTanque(float cant) { if (litrosgasolina + cant < CAPACIDAD_MAXIMA) litrosgasolina = litrosgasolina + cant; Nuestra clase Carro tiene dos miembros de tipo de datos: litrosgasolina y encendido. Además tiene dos funciones, Apagar y LlenarTanque, que simulan el comportamiento de un carro al ser apagado y al llenar su tanque de gasolina, respectivamente. iii. Constructores Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase al mismo tiempo que se declara. Los constructores son especiales por varios motivos: Tienen el mismo nombre que la clase a la que pertenecen. No tienen tipo de retorno, y por lo tanto no retornan ningún valor. No pueden ser heredados.

Sintaxis: class <identificador de clase> { public: <identificador de clase>(<lista de parámetros>) { <código del constructor>... Si no definimos un constructor el compilador creará uno por defecto, sin parámetros, que no hará absolutamente nada. Los datos miembros del los objetos declarados en el programa contendrán basura. Si una clase posee constructor, será llamado siempre que se declare un objeto de esa clase. Si ese constructor requiere argumentos es obligatorio suministrarlos. El constructor para nuestra clase Carro quedaría de la siguiente manera: class Carro { private: // Datos miembro de la clase "Carro" float litrosgasolina; bool encendido; public: // Constructor por defecto Carro(); // Funciones miembro de la clase "Carro" void Apagar() void LlenarTanque(float cant); ; Carro::Carro() { encendido = false; litrosgasolina = 0.0f; void Carro::Apagar(){ encendido = false; void Carro::LlenarTanque(float cant) { if (litrosgasolina + cant < CAPACIDAD_MAXIMA) litrosgasolina = litrosgasolina + cant;

iv. Constructores por defecto Cuando no especifiquemos un constructor para una clase, el compilador crea uno por defecto sin argumentos. Cuando se crean objetos locales, los datos miembros no se inicializarían, contendrían la "basura" que hubiese en la memoria asignada al objeto. En C++ incluso las variables de tipos datos elementales como int, char o float son objetos. En C++ cualquier variable (u objeto) tiene, al menos un constructor, el constructor por defecto, incluso aquellos que son de un tipo elemental. Al crear una variable de tipo Carro, se invoca el constructor por defecto. No es necesario colocar los paréntesis para crear el objeto, y su sintaxis es: v. Getters y Setters Carro micarro; Uno de los pilares del paradigma POO es el encapsulamiento. No es exclusivamente set y get los que definen dicho pilar pero ellos implementan y permiten que suceda. Qué significa encapsular? En poder definir el alcance, visibilidad de cualquier atributo o método de una clase, esto nos otorga un par de beneficios, como que nadie asigne valores por equivocación o sobrescriban funcionalidades cuando no deben. Es buena práctica de programación crear los atributos con el modificador private mientras que los setter y getter con public. De esta manera las variables atributos (variables miembro) podrán ser accedidas y modificadas no directamente sino a través de los set y get. Siguiendo con el ejemplo de Carro, agregaremos este nuevo concepto al código ya existente. Declararemos y definiremos 2 get y 2 set. class Carro { private: // Datos miembro de la clase "Carro" float litrosgasolina; bool encendido; public: // Constructor por defecto Carro(); // Funciones miembro de la clase "Carro" void Apagar() void LlenarTanque(float cant); // Getters float getlitrosgasolina(); bool getencendido();

// Setters void setlitrosgasolina(float lit); void setencendido(bool enc); ; Carro::Carro() { encendido = false; litrosgasolina = 0.0f; void Carro::Apagar(){ encendido = false; void Carro::LlenarTanque(float cant) { if (litrosgasolina + cant < CAPACIDAD_MAXIMA) litrosgasolina = litrosgasolina + cant; float Carro::getLitrosGasolina(){ return litrosgasolina; bool Carro::getEncendido(){ return encendido; void Carro::setLitrosGasolina(float lit) { litrosgasolina = lit; void Carro::setEncendido(bool enc) { encendido = enc; vi. Herencia Una de las principales propiedades de las clases es la herencia. Esta propiedad nos permite crear nuevas clases a partir de clases existentes, conservando las propiedades de la clase original y añadiendo otras nuevas. Cada nueva clase obtenida mediante herencia se conoce como clase derivada, y las clases a partir de las cuales se deriva, clases base. Además, cada clase derivada puede usarse como clase base para obtener una nueva clase derivada. Y cada clase derivada puede serlo de una o más clases base. La forma general de declarar clases derivadas es la siguiente: class <clase_derivada> : [public private] <clase_base> {... ;

En seguida vemos que para cada clase base podemos definir dos tipos de acceso, public o private. Si no se especifica ninguno de los dos, por defecto se asume que es private. public: los miembros heredados de la clase base conservan el tipo de acceso con que fueron declarados en ella. private: todos los miembros heredados de la clase base pasan a ser miembros privados en la clase derivada. GDAYED