C++ proporciona la capacidad de crear tipos definidos por el usuario mediante las palabras reservadas enum, struct, union y la nueva palabra reservada class. A diferencia de C, una enumeración (enum) en C++, cuando se declara, se convierte en un nuevo tipo. Para declarar la variable del nuevo tipo, la palabra reservada enum no es necesaria. Lo mismo pasa con struct, union y class. Las enumeraciones por omisión son evaluadas iniciándose a cero.
Los nombres de etiqueta pueden ser utilizados para declarar variables.
Declaración y utilización de una estructura en C y en C++
|
|
| // C struct mystruct{ int i; char c; }; struct mystruct nueva_estructura; |
// C++ struct mystruct{ int i; char c; }; mystruct nueva_estructura; |
Clases.
Una clase define un nuevo tipo de objeto. Para definir una clase se usa la palabra reservada class. La declaración de una clase es similar, sintácticamente, a una estructura.
- Para declarar una estructura usamos la palabra reservada struct
- Para declarar una clase utilizaremos la palabra clave class.
- El cuerpo de la definición de la estructura y de la clase se delimita con llaves {}
- En una estructura todos sus miembros son públicos, si no se especifica otra cosa.
- En una clase todos sus miembros son privados, si no se especifica otra cosa.
- Una estructura en C++, puede contener funciones, (en C no)
- Una clases contiene funciones, normalmente públicas, que son la interfaz de la clase.
Definición general de una clase:
class nombreClase{
private:
//Variables miembro
public:
//Funciones miembro
//Interfaz de la clase
};
En una estructura, por ejemplo la declarada más arriba mystruct, para acceder a sus miembros lo haríamos así:
nueva_estructura.i = 10;
nueva_estructura.c = 'a';
En las clases los miembros son privados por defecto por lo que no se puede acceder a ellos desde fuera de la propia clase. No se puede asignar o leer un valor de una variable miembro directamente por lo que para poder hacerlo hay que utilizar la funciones miembro que la clase nos provee.
class myClass{
private:
int i;
char c;
public:
int getI(void){return i;}
void setI(int _i){i = _i;}
char getC(void){return c;}
void setC(char _c){c = _c;}
};
En este ejemplo de clase llamado myClass para poder utilizar la clase primero debemos declarar una variable de clase (un objeto).
myClass nueva_clase;
Ahora si quisiéramos acceder a la variable miembro i de esta forma:
nueva_clase. i = 10; //Acceso no autorizado
Nos dará aun error y no dejaría compilar.
Para poder acceder a los miembro privados de una clases, tenemos que valernos de la interfaz que la clase nos provee (las funciones miembro)
Para establecer un valor de i llamaríamos a la función miembro setI(...)
nueva_clase.setI(10);
y lo mismo para la variable miembro c.
nueva_clase.setC('b');
Las funciones miembro de una clase son las únicas que pueden tener acceso a las variables miembro de su clase. (Esto se matizará más adelante cuando hablemos de las funciones amigas)