Nuevos tipos de datos de C++

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)