Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Zodiak98 en 15 Mayo 2013, 00:45 am



Título: [DUDA] Clases anidadas.
Publicado por: Zodiak98 en 15 Mayo 2013, 00:45 am
Bueno tengo una duda sobre las clases anidadas, mi duda es la siguiente:

Si creo una clase dentro de otra clase, los datos miembros de la clase interna también le pertenecen a la clase externa.?

Si yo creo una función miembro constante en la clase externa, puedo modificar las variables miembro de la clase interna o no?

Otra cosa porqué si yo al declarar el nombre de una clase en la función principal, digamos que es const las demas funciones tienen que ser const porqué si no da error, a que se debe esto? Pude concluir que es para no modificar los valores que le pase o simplemente le digo al compilador que esa variable solamente trabajara con las funciones const. Un ejemplo claro seria este:

Código:
#include <iostream>
using std::cout;
using std::endl;
class Prueba
{
 private:
  int x;
 public:
  Prueba(int x = 0){escribe(x);}//constructor
  int obtiene() const{return x;}//obtiene es const
  int obtiene2(){return x;}
  void escribe(int y){x = y;}
  // void escribe(int y) const{x = y;}
};
int main()
{
  Prueba num1;
  const Prueba num2(25);
  cout << num2.obtiene();
  // cout << num2.obtiene2(); //error obtiene2 no es const.
  num1 = num2;
  cout << num1.obtiene2(); //permitido num1 no es const.
}

Para resumir la tercera pregunta que dudo haya quedado clara xD Ya como les enseñe este código(No recuerdo de donde lo saque creo que de un blog >__<) En fín, le estoy diciendo al compilador que 'num2' trabajara únicamete con las funciones miembro constantes de la clase Prueba?


Título: Re: [DUDA] Clases anidadas.
Publicado por: amchacon en 15 Mayo 2013, 01:03 am
Citar
Si creo una clase dentro de otra clase, los datos miembros de la clase interna también le pertenecen a la clase externa.?
No. Ambas clases se comunican como si se creasen por separado.

Lo ideal esque definas las dos clases por separado y luego crees el objeto en la clase:

Código
  1. clase Interna
  2. {
  3. private:
  4.  int dato1;
  5.  int dato2;
  6.  //blablabla...
  7. };
  8.  
  9. clase Externa
  10. {
  11. private:
  12.  Interna Nueva; // Creando una clase dentro de otra
  13.  
  14.  //blablabla....
  15. };
  16.  
Citar
Si yo creo una función miembro constante en la clase externa, puedo modificar las variables miembro de la clase interna o no?
No, una función constante no puede modificar ningún dato... Y si modificas una clase estás cambiando datos.

Citar
Otra cosa porqué si yo al declarar el nombre de una clase en la función principal, digamos que es const las demas funciones tienen que ser const porqué si no da error, a que se debe esto?
Todo objeto constante se caracteriza porque no se puede modificar, la única forma que tiene el compilador de saber esto es coger las funciones que poseen el atributo const.