Насколько я понимаю, они оба поддерживают наследование, оба могут содержать поля и функции, оба могут содержать конструктор и деструктор, оба поддерживают наследование. Разница в том, что функции и переменные без ключевого слова private/protected/public одним по умолчанию отправляются в раздел private, другим в раздел public. Возможно ли наследование struct из родителя class и наоборот? Если да, то каким образом будут преобразованы поля без модификатора? Например, отправляя из class в дочерний struct они останутся private или станут public? Если нет, то почему нет? Наследование имею ввиду полное, модификатор наследования public.
Наследование возможно.
Члены struct ведут себя так, как будто в начале определения struct стоит неявный спецификатор доступа public, а члены class - как будто в начале определения стоит неявный спецификатор доступа private
struct S
{
// public:
...
};
class C
{
// private:
...
};
При наследовании, если наследник является struct, то наследование выполняется как public по умолчанию. Если наследник является class, то наследование выполняется как private по умолчанию.
struct DS : Parent // эквивалентно `struct DS : public Parent`
{
...
};
class DC : Parent // эквивалентно `class DC : private Parent`
{
...
};
А далее работают одни и те же общие правила, единые и для class, и для struct: более ограничивающий уровень доступа "побеждает" более расслабленный уровень доступа.
Поскольку struct - это class с public по умолчанию, действуют все те же правила, как если бы это был класс, члены которого объявлены как public - понятно, те, которые объявлены без модификатора. Члены, объявленные с модификатором, ведут себя точно так же, как если бы этот тип был объявлен как class.
Надеюсь, описывать правила доступа при наследовании тут не нужно? :) А то можно не успеть их закончить в 2018 году :)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей