[Programación C++] Acceso atributos clase padre

vulkaNorz

Hola buenas,

Tengo una duda que me carcome, y es que no sé como se puede acceder a uno o varios atributos PRIVADOS de una clase padre, desde alguna clase derivada suya (clase hija); todo esto si es que hay forma claro...

Ya sé que lo más razonable y lo normal es declararlos de ámbito protegido en lugar de privado a esos atributos de la clase padre, pero parece que mi profesor está empecinado en que lo hagamos de esta forma para currarnos el trabajo con punteros o vaya usted a saber qué...

Muchas gracias por adelantado.

dagavi

Con métodos getters/setters.

Directamente NO se puede, como bien indicas son privados y por lo tanto su ámbito de visibilidad es su propia clase (no subclases).

Si necesitas poder acceder a los atributos y no puedes cambiar el ámbito a protected (ámbito: la propia clase + subclases) lo que se suele utilizar son los getters y setters, es decir, métodos (públicos o protected, decide que necesitas) para obtener y establecer los valores.

Ej:

class persona {
private:
    int edad;

public:
    void setEdad(int edad) {
            this.edad = edad;
    }

int getEdad() const {
    return edad;
}
}
vulkaNorz

Gracias! pero me parece que ya encontré lo que quería.

El problema es que no expliqué en que momento exacto de mi programa necesito hacer tal acceso, y ese es precisamente el problema por el que me estaba volviendo loco, que ni yo mismo me había dado cuenta y estaba buscando una solución más "genérica". Se trata del momento de inicialización de atributos de la clase padre en el constructor de la clase hija.

Por lo que he podido encontrar, parece que de la siguiente forma se me solucionaría este problema, o estoy equivocado?

CPiezaElectrica::CPiezaElectrica (const char* pNombre,
const char* pCodigo) : CPieza (pNombre, pCodigo)

PD: CPieza es la clase padre y CPiezaElectrica es la clase hija en este caso

B

Si la clase padre tiene el constructor sobrecargado con acceso a los elementos privados si puedes modificarlos a la hora de crear el hijo. Pero vamos que lo que modifiques se cambia en el hijo no en el padre. No se si me he explicado bien.

dagavi

#3 Faltaba decir que lo que querías era llamar al constructor de la superclase que tenías sobrecargado xD
Pero si, se realiza de esa forma. (si no recuerdo mal C++ llama automáticamente al construtor por defecto, sin parámetros, al necesitar uno con parámetros debes de realizar eso).

Usuarios habituales