Dev - C++ - [Duda] Método accesible desde clase base.

 
Vista:

[Duda] Método accesible desde clase base.

Publicado por F4cundo (1 intervención) el 31/01/2015 01:45:54
Hola, como andan ? estoy algo olvidado en C++ jaja, y tengo una duda de algo que creo que no es posible hacer, pero no estoy seguro.

Supongamos que hay una clase base y una hija:

1
2
3
4
5
6
7
8
9
10
11
12
class cBase
{
public:
   metodo_1_clase_base();
   metodo_2_clase_base();
};
 
class cHijo : public cHijo
{
public:
   metodo_1_clase_hijo();
}

con esto, al tener los métodos de la clase base como public y heredado la clase como public se puede hacer esto

1
2
3
4
5
6
7
8
9
10
void main(){
cHijo hijo;
hijo.metodo_1_clase_base();
hijo.metodo_2_clase_base();
hijo.metodo_1_clase_hijo();
 
cBase base;
base.metodo_1_clase_base();
base.metodo_2_clase_base();
}

mi duda es:
¿Hay una configuracion de acceso para hacer que solo el metodo metodo_2_clase_base() no sea accesible desde la clase cHija?

dejando por ejemplo:
1
2
3
4
5
6
7
8
9
10
void main(){
cHijo hijo;
hijo.metodo_1_clase_base(); //Permitido
hijo.metodo_2_clase_base(); //No Permitido
hijo.metodo_1_clase_hijo(); //Permitido
 
cBase base;
base.metodo_1_clase_base(); //Permitido
base.metodo_2_clase_base(); //Permitido
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

[Duda] Método accesible desde clase base.

Publicado por crack811 (50 intervenciones) el 31/01/2015 21:16:01
Una forma de resolver el problema es que cuando heredes la clase sobrecarges el segundo metodo que no quieres que sea accesible en la clase hija y lo pongas en privado asi no se podra acceder en la segunda clase solo en la primera


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<iostream>
using namespace std;
 
 
class cBase{
 
public:
    void metodo1_claseBase(){
      cout<<"Soy el metodo 1 de la clase base"<<endl;
    }
 
    void metodo2_claseBase(){
        cout<<"soy el metodo 2 de la clase base"<<endl;
    }
 
 
 
};
 
class cHijo:public cBase{
public:
    void metodo1_claseHijo(){
        cout<<"soy el metodo 1 de la clase hijo"<<endl;
    }
private:
     void metodo2_claseBase(){//sobrecargamos el metodo y lo ponemos en privado asi solo se puede acceder desde el padre
        cout<<"Este metodo no se puede mostrar"<<endl;
    }
 
};
 
int main(){
 
    cHijo hijo;
    hijo.metodo1_claseBase(); //Permitido
    //hijo.metodo2_claseBase(); //No Permitido
    hijo.metodo1_claseHijo(); //Permitido
 
    cout<<endl;
 
    cBase base;
    base.metodo1_claseBase(); //Permitido
    base.metodo2_claseBase(); //Permitido
 
 
 
cin.get();
cin.get();
return 0;}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

[Duda] Método accesible desde clase base.

Publicado por Martín (158 intervenciones) el 03/02/2015 05:12:55
Un comentario adicional:

Sobrecargando y haciendo privado el método de cHijo impide que pueda invocarse directamente, pero siempre es posible invocar al método sobrecargado de la clase base:
hijo.cBase::metodo2_claseBase();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

[Duda] Método accesible desde clase base.

Publicado por vangodp (287 intervenciones) el 02/02/2015 14:00:14
No lo entiendo... Tienes 2 clases, Base y Derivada sin embargo haces:
class cHijo : public cHijo
{
}

...Lo cual hereda de la misma clase. O sea que creo que seria

class cHijo : public cBase
{
}

Con respecto a la otra duda. creo que te la respondio muy bien crack811. La respuesta es el polimorfismo.
Yo lo llamo "El caso penguino" XD

Por ejemplo: La clase AVE que generaliza todo lo que hace una ave como beber, comer, volar etc etc. todas las aves lo hacen y lo pueden heredar. Sin hembargo existe una "ave" que lo hace todo menos volar... Es el penguino XDDD

Pues si existe un metodo volar en la clase base, ese debe permitir ser modificado ya que penguino no puede volar. A eso se le denomina polimorfismo(muchas formas).

Se puede leer un tema muy interesante aqui: http://c.conclase.net/curso/?cap=037

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar