index.htm

PREPARATE PARA EL VERANO

aeromodelismo - apuntes comunicaciones javascript lenguaje c php autoayuda bolsa bricolage chistes deportes empleo fotografia digital mascotas motor ocio pisos plantas recetas sabiasque salud thermomix timos trucos

OBJETOS ENCADENADOS EN C

Un objeto con un puntero a otro objeto: Objetos encadenados.

Añadamos a la clase Caja como atributo privado un puntero a otro objeto de la misma clase:

#include <iostream.h>

class Caja {

double longitud, anchura, altura;

Caja *otraCaja;

public:

Caja(double dim1, double dim2, double dim3); //Constructor

double volumen(void);

void point_at_next(Caja *where_to_point);

Caja *get_next(void);

};

Caja::Caja(double dim1, double dim2, double dim3) { //implementacion del constructor

longitud = dim1;

anchura = dim2;

altura = dim3;

otraCaja = NULL;

}

double Caja::volumen(void) {

return (longitud * anchura * altura);

}

void Caja::point_at_next(Caja *where_to_point) {

otraCaja = where_to_point;

}

Caja *Caja::get_next(void) { // Este metodo devuelve la caja a la que apunta la caja actual

return otraCaja;

}

main() {

Caja pequeña(5, 4, 10), mediana (10, 6, 20), grande(20, 10, 30);

Caja *CajaPointer;

cout << 'El volumen de la Caja pequeña es ' << pequeña.volumen() << '\n';

cout << 'El volumen de la Caja mediana es ' << mediana.volumen() << '\n';

cout << 'El volumen de la Caja grande es' << grande.volumen() << '\n';

pequeña.point_at_next(&mediana);

mediana.point_at_next(&grande);

CajaPointer = &pequeña;

CajaPointer = CajaPointer->get_next();

cout << 'La Caja apuntada tiene volumen = ' << CajaPointer->volumen() << '\n';

}

El resultado de la ejecucion sera :

El volumen de la Caja pequeña es 200

El volumen de la Caja mediana es 1200

El volumen de la Caja grande es 6000

La Caja apuntada tiene volumen = 1200

En este programa:

· Hemos definido, en la parte privada de la clase Caja, un puntero a un objeto de la misma Clase. Esta es la estructura utilizada para la construccion de listas encadenadas.

· El constructor asigna el valor NULL al puntero. Esta es una buena idea, inicializar siempre los punteros. Haciendo esta asignacion en el constructor, se garantiza que cada objeto de esta clase tendra automaticamente su puntero inicializado.

· Hemos añadido dos funciones: point_at_next y get_next. Esta ultima devuelve un puntero a un objeto de la clase Caja.

· En el programa principal declaramos un puntero a un objeto del tipo Caja, CajaPointer.

· Hacemos que el puntero embebido en la caja pequeña apunte a la caja mediana, y que el puntero embebido en la caja mediana apunte a la caja grande. Hemos generado una lista encadenada con tres elementos.

· A continuacion hacemos que el puntero CajaPointer apunte a la caja pequeña y lo utilizamos para referenciar a la caja pequeña y actualizarlo al valor contenido en la caja pequeña que es la direccion de la caja mediana. Hemos pasado, pues, de un elemento de la lista al siguiente llamando a una funcion de uno de los objetos.

Un objeto embebido en otro objeto. El puntero this.

En C++ se define this dentro de un objeto como un puntero al objeto en que esta contenido. Se declara implicitamente como:

class_name *this;

y se inicializa para apuntar al objeto para el cual se llama a la funcion miembro. Este puntero es muy util cuando se trabaja con punteros y especialmente en listas encadenadas cuando se necesita referenciar un puntero al objeto que se esta insertando en la lista. La palabra this esta disponible para este proposito y puede ser utilizada en cualquier objeto. Realmente la forma apropiada de referenciar a cualquier variable en una lista es a traves del uso del puntero predefinido this, escribiendo this -> nombre_variable, pero el compilador supone que se esta usando, y podemos omitir el puntero.

Funciones amigas.

Una funcion fuera de una clase puede definirse como funcion amiga por la clase que le da libre acceso a los miembros privados de la clase. Hay casos en que esto ayuda a hacer mas legible un programa, y permite el acceso controlado a los datos.

Una funcion aislada puede ser declarada como amiga, asi como miembro de otras clases, e incluso se le puede dar el status de amiga a clases enteras, si es necesario.

No pueden ser funciones amigas los constructores ni los destructores.


Anterior:
punteros a clases


Siguiente:
sobrecarga de operadores



apuntes lenguaje c:

· Algunos conceptos
· Tipos en el lenguaje c
· Variables y constantes en c
· Operadores en el lenguaje c
· Entrada/salida en c
· Estructuras de control en c
· Arrays y punteros en c
· Reserva dinamica de memoria en c
· Funciones en lenguaje c
· Estructuras en lenguaje c
· Clases
· Clases y encapsulacion en c
· Clases constructores y desctructores en c
· Descomposicion en modulos en c
· Array de objetos en c
· Clases static en c
· Un objeto con un puntero interno
· Punteros a clases en c
· Objetos encadenados en c
· Sobrecarga de operadores en c

IMPORTANTE:

- Si te ha gustado esta pagina, por favor, votanos aqui:
- Si no te ha gustado, escribenos y cuentanos en que mejorar.

Actualizado: 20/05/2013




· · · · ·