Cita:
Iniciado por vangodp Eso es que dentro de la clase el orden no importa tanto. Primero puedes hacer los constructores y después las variables.
Pero el orden es que primero se carga las variables en la memoria y después se construyen. No hay lógica que sea el contrario ¿no?
Estarás liado por que te has leído que todo debe estar declarado antes de ser usado, y así es como debe ser, pero en las clases eso no se aplica ya que todo esta bajo el mismo ámbito y el orden no importa.
De eso se encarga el preprocesador... De leer y cargar todo en memoria y poner cada cosa en su lugar.
Eso lo entenderás mejor cuando llegues a el tema del puntero this. [URL]http://c.conclase.net/curso/?cap=031[/URL]
En la parte que te dice:
Entonces en realidad lo que ocurre es que no están juntas en la memoria las funciones y las variables si no que tienes grupos de variables(cada una pertenece a su objeto creado) que al necesitar una función en común, esa se dirige hacia dicha función, pasa ese puntero this que dice donde esta las variables a las que tiene que hacer los cálculos, y listo. Internamente no estoy asignando antes de crearlas, es una falsa impresión.
Espero que no te este liando más. Es que el mecanismo de clases al principio te puede parecer extremadamente difícil y si que lo es, pero una vez pilles el tranquillo es que no puedes vivir sin clases nunca más XDD
Hola! Al final saqué un ratillo.
Por partes.
vangodp
Pues efectivamente no me entero de nada XDDDDDDD, pero está bien ir sabiendo que las cosas son por algo, y que mi lío estaba un poco justificado a medias. Supongo que para entender algo así no hay más que una solución: ir poco a poco y echarle horas. Como hasta ahora.
Pero cuanto más aprendo más me gusta.
amchacon
Pero a ver, es que hay algo que no me cuadra:
Cita: punto p crea un objeto de tipo punto.
Otra cosa esque el compilador llame al constructor para crear el objeto.
Hasta aquí bien, pero es que luego te entiendo que no se hace punto p(), sino punto p, por ser una excepción que yo creí que ocurría
en el caso de ser punto p un constructor, esto es, una llamada a una función.
Pero si es un objeto, es que no pintan ahí nada los paréntesis, ¿no?:
Cita:
BramSt:
en caso de ser un constructor, ¿es por su especial naturaleza de constructor que, al ser un constructor por defecto, se le llame usando "punto p" y no "punto p()" como entiendo que se haría con cualquier función sin parámetros "normal"?
Resp:
Sí, es una excepción a la norma.
Tiene dos justificaciones:
- Retrocompatibilidad con C: Las estructuras de C deben seguir funcionando en C++, y ahí no llevaban paréntesis.
- Ambiguedad: punto p() se puede interpretar también como la declaración de una función que devuelve un punto.
Entiendo por otro lado que si cuando hay parámetros sí se ponen, es porque simplemente los utilizas a la vez que declaras el objeto, por pura sintaxis (o eso he sacado de la explicación de
dmorill):
Cita: Cita:
BramSt:
Después, en caso de ser un constructor, ¿es por su especial naturaleza de constructor que, al ser un constructor por defecto, se le llame usando "punto p" y no "punto p()" como entiendo que se haría con cualquier función sin parámetros "normal"?
resp de demorill:
jeje por lo anterior pues no. Pero si el constructor tiene parámetros los llamas directamente cuando declaras la estructura u objeto. ej: punto(4, 5), punto(0, 0);
Quedamos en que no se está llamando a ninguna función en esa sentencia "punto p" ó "punto p(4,5)", ¿verdad? Es la declaración de un objeto del tipo clase que le corresponde.
Y no puede confundirse un punto p (4,5) con una llamada a función con dos parámetros que retorna un punto?
Gracias!
PD: Veo que vosotros también tenéis dudas, eso está bien, así no me siento tan mal por preguntar tanto y sin saber en algunas ocasiones si son preguntas lógicas XD