Структурное наследование в C ++ - PullRequest
149 голосов
/ 11 июня 2009

Может ли struct быть унаследовано в C ++?

Ответы [ 5 ]

264 голосов
/ 11 июня 2009

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

111 голосов
/ 11 июня 2009

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

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

struct A { };
struct B : A { };
struct C : B { };
40 голосов
/ 11 июня 2009

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

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

22 голосов
/ 11 июня 2009

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

15 голосов
/ 02 декабря 2016

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

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

Например, программа 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...