Héritage de structure en C ++

170

Un peut-il structêtre hérité en C ++?

Peter Mortensen
la source

Réponses:

290

Oui, structc'est exactement comme classsauf que l'accessibilité par défaut est publicpour struct(alors que c'est privatepour class).

Alex Martelli
la source
129

Oui. L'héritage est public par défaut.

Syntaxe (exemple):

struct A { };
struct B : A { };
struct C : B { };
Suvesh Pratapa
la source
46

Outre ce qu'Alex et Evan ont déjà déclaré, je voudrais ajouter qu'une structure C ++ n'est pas comme une structure C.

En C ++, une structure peut avoir des méthodes, un héritage, etc. tout comme une classe C ++.

Chad Gorshing
la source
4
une structure C ++ peut être comme une structure C. Quand c'est le cas, on l'appelle un POD - Ancien type de données. C'est une distinction importante, car par exemple, seules les structures POD peuvent faire partie d'unions.
camh le
9
Mais les POD peuvent avoir des méthodes, donc ne sont pas des structures C "similaires" au sens dont parle cgorshing.
Steve Jessop du
Si c'est un POD, il n'a pas de méthodes. Sinon, le nom n'a pas de sens.
RL-S
24

Bien sûr. En C ++, les structures et les classes sont presque identiques (des choses comme la valeur par défaut de public au lieu de private font partie des petites différences).

Evan Teran
la source
23

En C ++, l'héritage d'une structure est identique à une classe à l'exception des différences suivantes:

Lors de la dérivation d'une structure à partir d'une classe / structure, le spécificateur d'accès par défaut pour une classe / structure de base est public. Et lors de la dérivation d'une classe, le spécificateur d'accès par défaut est privé.

Par exemple, le programme 1 échoue avec une erreur de compilation et le programme 2 fonctionne correctement.

// 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
la source