Понимание синтаксиса конструктора/наследования в структуре C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Понимание синтаксиса конструктора/наследования в структуре C++

Сообщение Anonymous »

Я новичок в C++, у меня есть опыт Python и некоторый предыдущий опыт работы с C, и я наткнулся на синтаксис в руководстве по struct, который мне трудно понять, поскольку он касается конструкторов и наследования, отсутствующих в C. Соответствующие строки обозначены ниже строкой 1 и строкой 2

Код: Выделить всё

enum class ObjectType {
STRING,
NUMBER,
};

struct Object {
Object(ObjectType type) : type(type) {}  // Line 1
ObjectType type;
};

struct StrObject : public Object {
StrObject(const std::string &str) : Object(ObjectType::STRING), string(str) {} // Line 2
std::string string;
};
В строке 1 я понимаю, что это конструктор структуры Object, который принимает значение из перечисления ObjectType в качестве аргумента, который он называется типом. Чего я не совсем понимаю, так это того, что происходит в оставшемся : type(type) {.
Аналогично в строке 2, это конструктор для структуры StrObject, которая принимает ссылку на строку в качестве аргумента и вызывает ее str. Опять же, следующий синтаксис я изо всех сил пытаюсь понять: Object(ObjectType::STRING), string(str) {.
Я предполагаю, что происходит в Line 2 - Object(ObjectType::STRING) вызывает конструктор родительской структуры со значением перечисления STRING, которому в строке 1 присваивается тип переменная-член через бит type(type)? Аналогично, в строке 2 string(str) устанавливает значение переменной-члена string в любое значение, переданное в конструктор при создании экземпляра StrObject.
Предполагая, что вышеизложенное является правильной интерпретацией, почему это происходит перед телом функции {}, а не внутри, как в случае с классами на других языках (например, Python, Javascript и т. д.) )?

Подробнее здесь: https://stackoverflow.com/questions/781 ... n-c-struct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»