[C++] Dudas en general

Iniciado por megalomania, 27 Junio 2010, 12:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

megalomania

Gracias, a ver tengo una duda con la herencia protected:

Si tengo:
Código (cpp) [Seleccionar]

class ClaseA
{
 public int a;
 private int b;
 protected int c;
}

class ClaseH : public ClaseA // ClaseH tendra implicito
 public int a;
 private int b;
 protected int c;

class ClaseH : private ClaseA // ClaseH tendra implicito
 private int a;
 private int b;
 private int c;

class ClaseH : protected ClaseA // ClaseH tendra implicito
 private int a;
 private int b;
 protected o private int c;?¿



Solo quiero saber si a esta conclusión que e llegado después de leerme los links q me habéis pasado es correcto :/
salu2 y gracias!!

Horricreu

#11
No sé si se me ha entendido bien en el primer punto. Esto está mal:

Código (cpp) [Seleccionar]
class ClaseA
{
public int a;
private int b;
protected int c;
}


Cuando declaras una clase debes tener en cuenta de que:

Código (cpp) [Seleccionar]
class ClaseA
{
public:
         int a;

  private:
         int b;

protected:
         int c;
};


Siempre que se hace public/private/protected, debe ir ":". Y las clases se terminan con ";".

Saludos :P

megalomania

Cita de: Horricreu en 27 Junio 2010, 15:28 PM
No sé si se me ha entendido bien en el primer punto. Esto está mal:

Código (cpp) [Seleccionar]
class ClaseA
{
public int a;
private int b;
protected int c;
}


Cuando declaras una clase debes tener en cuenta de que:

Código (cpp) [Seleccionar]
class ClaseA
{
public:
          int a;

  private:
          int b;

protected:
          int c;
};


Siempre que se hace public/private/protected, debe ir ":". Y las clases se terminan con ";".

Saludos :P

Ok lo entiendo, a partir de ahora sere estricto con la sintaxis.
Ahora sería alguien tan amable de responder a mi pregunta  :-[ :-[ :-[ :-[ :-[ :-[

Littlehorse

#13
CitarEl problema de poner el codigo es que son muchas lineas para copiaros todo, ademas mi duda es principalmente teórica mas no técnica.
Entonces porque tendría sentido?, yo entiendo que si tengo solo una instancia del padre y otra del hijo, siendo el hijo el unico que tiene atributos static, xq tendria sentido? es decir un atributo static es una variable comun a todas las instancias de la clase, cosa q en este caso solo habrá como mucho una instancia del hijo.

Porque posiblemente dicho miembro necesita la posibilidad de ser consultado por varias instancias del objeto. Obviamente que si tenes una sola instancia no tiene sentido, pero cuando desarrollas una clase no lo haces solamente pensando en cuantas instancias del objeto van a existir. Por eso mismo te digo que depende de la estructura general del programa.

CitarBásicamente lo que ha hecho el es spam, para eso se podria ahorrar su respuesta.

Lo que digas, a mi no me parece. Si planteas tu duda en forma de "Para que sirve tal x" sin elaborar mas, otra cosa no podes esperar. En todo caso si es spam o no, queda a criterio de los moderadores, por mi parte en este caso no lo fue y espero que aprendas que para conseguir esfuerzo en una respuesta, se debe emplear el mismo en la forma de hacer la pregunta.

Citar
Insisto, ya me he leido antes un poco de teoria, y el que me as pasado ahora, que mi ingles tampoco es para tirar cohetes, segun lo que e podido entender es cuando conviene usar los tipos de herencia, y esa no a sido mi pregunta :S.

Depende lo que quieras hacer, pero si derivas en protected, los miembros public y protected de la clase base, siguen siendo public y protected. son protected en la derivada.

Edit: Pequeña corrección.

Saludos

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

megalomania

Citar
Porque posiblemente dicho miembro necesita la posibilidad de ser consultado por varias instancias del objeto. Obviamente que si tenes una sola instancia no tiene sentido, pero cuando desarrollas una clase no lo haces solamente pensando en cuantas instancias del objeto van a existir. Por eso mismo te digo que depende de la estructura general del programa.
Ok, entendido, era solo eso, confirmar lo que yo habia entendido, gracias!

Citar
Lo que digas, a mi no me parece. Si planteas tu duda en forma de "Para que sirve tal x" sin elaborar mas, otra cosa no podes esperar. En todo caso si es spam o no, queda a criterio de los moderadores, por mi parte en este caso no lo fue y espero que aprendas que para conseguir esfuerzo en una respuesta, se debe emplear el mismo en la forma de hacer la pregunta.
Veo que ambos tenemos opiniones distintas, acerca de como responder, si bien es cierto cada uno es libre de escribir lo que desee, no deberíamos darle mas vueltas a esto, por mi parte doy el tema por zanjado.

Citar
Depende lo que quieras hacer, pero si derivas en protected, los miembros public y protected de la clase base, siguen siendo public y protected.
Saludos

Gracias!, como ya decia antes, la teoría ya la e leido y creo que la comprendo en su mayoria, pero aveces me kedan estas dudas existenciales, y como a mi me gusta saber lo que estoy haciendo y no escribir a lo tonto, por eso el de mi pregunta, ya que por una razon u otra hay cosas q parecen obvias pero le doy mas vueltas de las necesarios y me lio.

Una vez mas gracias ;)

Littlehorse

CitarVeo que ambos tenemos opiniones distintas, acerca de como responder, si bien es cierto cada uno es libre de escribir lo que desee, no deberíamos darle mas vueltas a esto, por mi parte doy el tema por zanjado.

No creo que sean tan distintas, en mi caso me gusta explicar lo mejor posible siempre y cuando vea esfuerzo en la otra parte y se tengan los detalles suficientes sobre lo que hay que explicar. Probablemente si sean distintas las opiniones sobre como hacer una pregunta.
Por otro lado déjame decirte - como recomendación para futuros hilos- que si hubieses elaborado en tu post inicial de la misma forma que lo intentaste en los post siguientes, nadie te hubiese mandado a Google ya que la duda especifica se hubiese comprendido de entrada.

CitarGracias!

De nada :D, para eso estamos.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

megalomania

#16
Código (cpp) [Seleccionar]
class ClaseA
{
 public:
 int a;
 private:
 int b;
 protected:
 int c;
};
class HPublica : public ClaseA
{
       int getNum(){ return a*c;};
};

class HPrivada : private ClaseA
{
       int getNum(){ return a*c;};
};

class HProtegida : protected ClaseA
{
       int getNum(){ return a*c;};
};
#pragma argsused
int main(int argc, char* argv[])
{
       HPublica pub;
       pub.a;

       HPrivada priv;
       HProtegida proc;

       ClaseA claseA1 = pub;
       ClaseA claseA2 = priv;//Error!!!
       ClaseA claseA3 = proc;//Error!!!

       return 0;
}


Creo que sigo sin entender los tipos de herencia :S
Quisiera saber xq me da error al compilar(cannot convert HPrivada to ClaseA y lo mismo con HProtegida) las 2 sentencias que pongo como error!!, es acaso porque al ser herencias del tipo privado o protegida sus instancias no conservan nada de la clase base?

salu2 y gracias