Cpp programacion orientada objetos

Page 143

A diferencia de lo que ocurre con el resto de datos miembros, la declaración de un dato miembro static no es una definición. Esto es, el desarrollador debe proveer una inicialización o definición expresa en algún lugar del código, preferentemente en el archivo en que se implementan las funciones de la clase. La inicialización, por otro lado, al igual que ocurre con las variables globales estáticas, únicamente puede realizarse una vez. Veamos cómo: int Racional::numeroDeRacionales = 0;

Bueno, este código requiere algún comentario. En primer lugar vemos que es necesario aplicar a nuestra variable el operador de resolución de ámbito, lo cual es lógico, pues la visibilidad de ésta se limita al ámbito de la clase. Podríamos preguntarnos seguidamente: ¿qué pasa con el nivel de acceso? Esta variable es privada y, sin embargo la hemos inicializado con ámbito global de fichero. En realidad esta es una particularidad de los miembros estáticos de clases: el nivel de protección se refiere a las operaciones de acceso y modificación de los mismos, pero no afecta a su inicialización o definición. ¿Cómo podría usarse este nuevo miembro de la clase? Lo que parece más claro es que el constructor (o constructores en otros casos) incremente en una unidad el dato miembro estático cada vez que se cree un objeto, a la vez que el destructor minorará, igualmente, una unidad cada vez que se destruya uno. Racional::Racional( int num, int denom ) : numerador( num ), denominador( denom ) { simplificar(); Racional::numeroDeRacionales += 1; } Racional::~Racional() { Racional::numeroDeRacionales -= 1; }

Constructor y destructor pueden acceder al dato miembro estático, a pesar de ser privado, precisamente por ser funciones miembros de la clase. Pero sigamos con el esquema de ocultación de la información: numeroDeRacionales es un dato miembro privado y, al igual que haríamos con otros miembros no-estáticos, debemos proveer a la clase al menos de una función de acceso a tal variable. Intentémoslo: class Racional { public: static numeroDeObjetosRacionales() { return Racional::numeroDeRacionales; }

C++/OOP: UN ENFOQUE PRÁCTICO

Página 50/297


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.