web-dev-qa-db-fra.com

Héritage des structures en C ++

Est-ce qu'un struct peut être hérité en C++?

153
abbas

Oui, struct est exactement comme class sauf que l'accessibilité par défaut est public pour struct (alors que c'est private pour class).

272
Alex Martelli

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

Syntaxe (exemple):

struct A { };
struct B : A { };
struct C : B { };
112
Suvesh Pratapa

Outre ce qu'Alex et Evan ont déjà déclaré, j'aimerais ajouter qu'une structure C++ ne ressemble pas à une structure C.

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

43
Chad Gorshing

Bien sûr. En C++, les structures et les classes sont presque identiques (des différences, telles que le passage par défaut à public plutôt qu'à privé, font partie des différences).

23
Evan Teran

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

Lors de la dérivation d'une structure d'une classe/structure, le spécificateur d'accès par défaut pour une classe/structure de base est public. Et lorsque vous dérivez 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;
}
18
Neha Agrawal