Структурное наследование в C ++

Ответы:

290

Да, structточно так же, classза исключением того, что доступность по умолчанию publicдля struct(пока это privateдля class).

Алекс Мартелли
источник
129

Да. Наследование по умолчанию является публичным.

Синтаксис (пример):

struct A { };
struct B : A { };
struct C : B { };
Сувеш Пратапа
источник
46

Помимо того, что Алекс и Эван уже заявили, я хотел бы добавить, что структура C ++ не похожа на структуру C.

В C ++ структура может иметь методы, наследование и т. Д., Как и класс C ++.

Чад Горшинг
источник
4
структура C ++ может быть похожа на структуру C. Когда это так, его называют POD - Plain Old Datatype. Это важное различие, так как, например, только структуры POD могут быть частью профсоюзов.
Camh
9
Но у POD могут быть методы, поэтому они не похожи на C-структуры в том смысле, о котором говорит cgorshing.
Стив Джессоп
Если это POD, у него нет методов. Иначе имя не имеет смысла.
RL-S
24

Конечно. В C ++ структуры и классы практически идентичны (среди небольших различий такие вещи, как дефолт по умолчанию для public вместо private).

Эван Теран
источник
23

В C ++ наследование структуры такое же, как у класса, за исключением следующих отличий:

При извлечении структуры из класса / структуры спецификатор доступа по умолчанию для базового класса / структуры является общедоступным. А при получении класса спецификатор доступа по умолчанию является закрытым.

Например, программа 1 завершается с ошибкой компиляции, а программа 2 работает нормально.

// 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;
}
Неха Агравал
источник