Héritage de structure en C ++


Réponses:


290

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


129

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

Syntaxe (exemple):

struct A { };
struct B : A { };
struct C : B { };

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 ++.


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).


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;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.