Herencia de estructura en C ++

Respuestas:

290

Sí, structes exactamente igual, classexcepto que la accesibilidad predeterminada es publicpara struct(mientras es privatepara class).

Alex Martelli
fuente
129

Si. La herencia es pública por defecto.

Sintaxis (ejemplo):

struct A { };
struct B : A { };
struct C : B { };
Suvesh Pratapa
fuente
46

Aparte de lo que Alex y Evan ya han dicho, me gustaría agregar que una estructura C ++ no es como una estructura C.

En C ++, una estructura puede tener métodos, herencia, etc. al igual que una clase de C ++.

Chad Gorshing
fuente
44
una estructura de C ++ puede ser como una estructura de C. Cuando es así, se llama un POD - Tipo de datos antiguo simple. Es una distinción importante, ya que, por ejemplo, solo las estructuras de POD pueden ser parte de los sindicatos.
camh
9
Pero los POD pueden tener métodos, por lo que no son estructuras "similares" a C en el sentido del que habla cgorshing.
Steve Jessop
Si es un POD, no tiene métodos. De lo contrario, el nombre no tiene sentido.
RL-S
24

Por supuesto. En C ++, las estructuras y las clases son casi idénticas (cosas como el valor predeterminado de público en lugar de privado son algunas de las pequeñas diferencias).

Evan Teran
fuente
23

En C ++, la herencia de una estructura es la misma que una clase, excepto las siguientes diferencias:

Cuando se deriva una estructura de una clase / estructura, el especificador de acceso predeterminado para una clase / estructura base es público. Y al derivar una clase, el especificador de acceso predeterminado es privado.

Por ejemplo, el programa 1 falla con un error de compilación y el programa 2 funciona bien.

// Program 1
#include <stdio.h>

class Base {
    public:
        int x;
};

class Derived : Base { }; // Is equivalent to class Derived : private Base {}

int main()
{
    Derived d;
    d.x = 20; // Compiler error because inheritance is private
    getchar();
    return 0;
}

// Program 2
#include <stdio.h>

struct Base {
    public:
        int x;
};

struct Derived : Base { }; // Is equivalent to struct Derived : public Base {}

int main()
{
    Derived d;
    d.x = 20; // Works fine because inheritance is public
    getchar();
    return 0;
}
Neha Agrawal
fuente