Насколько я понимаю, они оба поддерживают наследование, оба могут содержать поля и функции, оба могут содержать конструктор и деструктор, оба поддерживают наследование. Разница в том, что функции и переменные без ключевого слова 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 году :)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Когда пытаюсь выполнить скрипт bimbampy выходит эта ошибка:
Как более правильно описать цикл примерно для следующей схемы кода:
Для генерации случайных чисел использую rand() перед этим иницииирую таймер srand(time(NULL));, но при каждом перезапуске программы числа одинаковые
Почему в случае ch = 3 в case игнорируется строка gets_s(text, 150)? То есть при срабатывании этого case программа не дает возможности ввести text