58 / 48 / 14
Регистрация: 23.02.2016
Сообщений: 433
1

Прямая инициализация в C++ и функция-конструктор в Javascript

09.04.2020, 02:01. Показов 5565. Ответов 76
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос собственно следующий, а не является ли прямая инициализация обычным вызовом функции как это сделано при создании объекта с помощью функции-конструктора в Javascript ? Просто сам синтаксис
C++
1
Rabbit Bugs_Bunny = new Rabbit('Bugs Bunny');
писал автоматически/аксиоматически, что вот так и всё, но в момент чтения статьи про конструктор в джиэсе меня что-то осенило, а вдруг в действительности вызывается некоторая функция, понятно, что тут вызов конструктора идёт, я к тому, что сама суть прямой инициализации состоит именно в вызове функции?

p.s. https://learn.javascript.ru/fu... onstructor
p.p.s. https://learn.javascript.ru/cl... a-funktsii
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2020, 02:01
Ответы с готовыми решениями:

Конструктор копий, инициализация объектов
#include <iostream> using namespace std; class myClass { public: myClass() { cout <<...

Инициализация массива через конструктор
Есть код : class test { private: int x; public: test() : x{ 0, 0 } {} }; Не понимаю...

Constexpr конструктор и инициализация массива
Подскажите и разъясните пожалуйста почему почему нельзя или как можно инициализировать статический...

Конструктор и Деструктор (инициализация массивов)
Стал вопрос по инициализации массивов (внутри класса) в конструкторе, но ни методичка, ни гугль...

76
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
09.04.2020, 02:35 2
Timurs, конструктор в C++ - это специальная функция-член. Поэтому отчасти вы правы.

Отчасти - потому, что не любая инициализация в С++ сопряжена с вызовом конструктора. Есть нюансы. Но в тех случаях, когда, вызов конструктора есть - это безусловно функция.
1
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 03:38 3
Цитата Сообщение от Timurs Посмотреть сообщение
я к тому, что сама суть прямой инициализации состоит именно в вызове функции?
Инициализация объекта это в любом случае вызов конструктора. Причем не зависимо от языка - это как бы продиктовано ООП вообще а не каким то языком. Ньюансы же С++ исключительно в том что в некоторых случаях сам конструктор неявно сгенерирован компилятором и в огромном количестве случаев вызов конструктора заинлайнен.
1
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
09.04.2020, 04:07 4
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
исключительно
Не так уж и исключительно.

Для некоторых типов вообще не существует конструкторов - это все встроенные типы и массивы.
Для некоторых типов в С++ также может быть предусмотрена агрегатная инициализация, она не задействует конструктор.

Причем можно заставить компилятор совершенно ясно эту разницу показать. Вот простейшая программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Этот тип - агрегатный
struct A 
{
    A(int) = delete; // мы запретили конструктор от int явно
    
    int a;
};
 
int main()
{
    A a { 1 }; // компилируется, т.к. для типа A доступна агрегатная инициализация без конструктора
 
    A b ( 2 ); // ошибка, конструктор был удален
}
Примеры в онлайн компиляторе по-отдельности:
-> С агрегатом.
-> C конструктором.

Теория: https://en.cppreference.com/w/... ialization
2
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 04:44 5
Цитата Сообщение от DrOffset Посмотреть сообщение
ричем можно заставить компилятор совершенно ясно эту разницу показать.
Вопрос не в том что можно запретить, а в том что если объект сконструировался то это сделал таки конструктор. Если конструктор запрещен для того или иного набора параметров то из этого набора объект сконструировать нельзя.

Цитата Сообщение от DrOffset Посмотреть сообщение
Для некоторых типов вообще не существует конструкторов - это все встроенные типы и массивы.
С каких пор встроенные типы стали объектами с точки зрения ООП? Это две огромные разницы - т.е. термин "объект" используемый в описании языка и используемый в ООП это далеко не одно и то же. При этом концептуально считается что конструктор есть у всего. Только у некоторых граждан он может быть исключительно тривиальным.
C++
1
2
3
4
5
6
7
8
#include<iostream>
#include<iomanip>
int main(){
     std::cout << std::boolalpha << __is_constructible(int, int) <<std::endl;
     std::cout << std::boolalpha <<__is_trivially_constructible(int, int) <<std::endl;
     std::cout << std::boolalpha << __is_constructible(int) <<std::endl;
     std::cout << std::boolalpha <<__is_trivially_constructible(int) <<std::endl;
}
везде будет true. т.е. по факту конструкторы есть везде. Другое дело что для тривиальных типов они только инлайнятся а адрес конструктора не доступен.
1
Вездепух
Эксперт CЭксперт С++
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
09.04.2020, 06:03 6
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При этом концептуально считается что конструктор есть у всего.
Нет, не считается. Конструкторы в С++ есть только у класс-типов.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Другое дело что для тривиальных типов они только инлайнятся а адрес конструктора не доступен.
Нет. У не-класс типов концептуально нет никаких конструкторов. Не надо изобретать никаких альтернативных сумасбродных теорий об "инлайнятся, а адрес не доступен".

Наличие слова "constructible" в названиях предикатов вроде std::is_constructible ничего не значит и ничего не доказывает - это не более чем желание не переусложнять ситуацию выдумыванием педантично точных названий. В спецификации этих предикатов ни слова ни о каких "конструкторах" или "конструировании" не говорится.
2
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 06:46 7
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Конструкторы в С++ есть только у класс-типов.
так и объектами с точки зрения ООП считаются только экземпляры классов но никак не тривиальных типов.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет. У не-класс типов концептуально нет никаких конструкторов.
Концептуально у них и операторы есть. Только опять же адреса недоступны.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не надо изобретать никаких альтернативных сумасбродных теорий об "инлайнятся, а адрес не доступен".
На самом деле плюсы как раз всю свою историю своего существования движутся как раз в направлении стирания разницы между классами и тривиальными типами. Логическим завершением этого пути будет как раз таки превращение тривиальных типов в псевдо-классы со встроенной в ядро языка сигнатурой - т.е. введение наследования от тривиальных типов и возможность получения адресов всех операторов конструкторов и т.д. специальных членов для тривиальных типов. Так понимаю это вопрос самых ближайших стандартов. Ибо для нормального определения алгебры над сущностями надо аки воздух. Там где более-менее серьезная математика юзается уже давно вместо тривиальных типов классы-обертки юзаются повсеместно.
Да и не только в вычислениях но и в обычной работе с массивами таки гораздо удобнее специальные не конвертирыемые друг в друга неявно типы для id размера емкости и т.д. иметь. хотя бы для перегрузки по ним методов получения вьюх и т.д..
1
58 / 48 / 14
Регистрация: 23.02.2016
Сообщений: 433
09.04.2020, 09:39  [ТС] 8
Очень интересно было прочитать ответы. Сам же думаю как Fulcrum_013, интересовала именно суть прямой инициализации.
Fulcrum_013, а можете объяснить для чего предназначен __is_constructible(int), прочёл про него и не понял ничего...
Меня смущает вот что, например,
C++
1
char val('x');
, предположим, что это действительно вызов какой-то скрытой функции, но как вообще такое поведение можно было реализовать, ведь никто не знает как я переменную назову?

Вот ещё нагуглил https://habr.com/ru/company/jugru/blog/469465/#a5
Пример
C++
1
2
3
4
5
6
7
8
9
struct Widget {};
 
struct Thingy {
  Thingy(Widget) {}
};
 
int main () {
  Thingy thingy(Widget());
}
На первый взгляд кажется, что при инициализации Thingy ему передаётся созданный по умолчанию Widget, но на самом деле здесь происходит объявление функции. Этот код объявляет функцию, которая получает на вход другую функцию, которая ничего не получает на вход и возвращает Widget, а первая функция возвращает Thingy. Код скомпилируется без ошибок, но вряд ли мы добивались именно такого поведения.
Поразил этот синтаксис
C++
1
Widget()
, как это вообще, это же вообще получается анонимная функция, но раз можно и так, то не исключено, что и тут
C++
1
char val('x');
может каким-то хитрым образом сгенерироваться функция. Общепринято, что переменная встроенного типа не считается объектом, но ведь это как посмотреть, по факту нам ничто вроде бы не мешает её назвать скрытым объектом (объектом, который получается в результате некоего скрытого механизма), действительно, какая разница как назвать эту сущность, но вот что конкретно происходит при прямой инициализации это действительно интересно... Весьма неочевидная вещь всё-таки
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 10:15 9
Цитата Сообщение от Timurs Посмотреть сообщение
а можете объяснить для чего предназначен __is_constructible(int), прочёл про него и не понял ничего...
Для определения имеет ли тип конструктор с заданным наборам аргументов. Используется в шаблонах для компайл-тайм ветвления по свойствам типа-аргумента.

Добавлено через 5 минут
Цитата Сообщение от Timurs Посмотреть сообщение
Меня смущает вот что, например,
Ну это и Страуструпа и Ко смущает. Ноги тут растут от того что синтаксис унаследован от С в котором никаких классов и следовательно и конструкторов не было. А соответственно и такой коллизии синтаксиса. Для ее разруливания и ввели универсальную инициализацию через {} который преобразовывается в вызов явного или неявно сгенерированного конструктора в зависимости от типа. А вызов конструктора с () через какое то время из языка удалят. Он в принципе сохраняется только для поддержки совместимости с горами легаси.

Добавлено через 17 минут
Ньюанс же в том что неявно сгенирированные конструкторы для тривиальных типов инлайнятся всегда - т.е. как функция которую можно вызвать они не существуют, в отличии от явных инлайн-конструкторов, вызываемую версию которых компилятор обязан сгенерить если увидит операцию взятия адреса.

Добавлено через 7 минут
Цитата Сообщение от Timurs Посмотреть сообщение
ведь никто не знает как я переменную назову
так определяется что делать не по имени переменной а по ее типу.
0
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
09.04.2020, 12:23 10
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вопрос не в том что можно запретить, а в том что если объект сконструировался то это сделал таки конструктор. Если конструктор запрещен для того или иного набора параметров то из этого набора объект сконструировать нельзя.
Нет, не конструктор. Конструктор компилятор не вызывал по причине его запрета. Это совершенно очевидно по тексту диагностики. Но инициализация таки возможна.
Все встанет на свои места, если вы перестанете апеллировать исключительно к ООП.
С++ поддерживает ООП, но им не ограничивается. Отсюда более широкие сценарии использования.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Это две огромные разницы - т.е. термин "объект" используемый в описании языка и используемый в ООП это далеко не одно и то же.
Вопрос темы более широкий, чем ООП, и рассматривать его в заведомо более узком смысле не корректно.
Timurs, обратите внимание на это.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 12:39 11
Цитата Сообщение от DrOffset Посмотреть сообщение
Но инициализация таки возможна.
через вызов другого конструктора.

Добавлено через 3 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Вопрос темы более широкий, чем ООП, и рассматривать его в заведомо более узком смысле не корректно.
Вопрос в том что термин "объект", используемый в описании языка не соответствует тому же термину в ООП. Обратите внимание именно на это.
Вопрос же изначально касается конструирования именно объектов в терминологии ООП. Именно они конструируются в JS при помощи функции-конструктора а не какие либо другие.

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Вопрос темы более широкий, чем ООП, и рассматривать его в заведомо более узком смысле не корректно.
Не в проекции ООП и модели акторов любой вопрос касательно любого ООП языка можно вообще не рассматривать - это бессмысленно. К примеру ответ на вопрос почему из плюсов при проектировании выбросили абсолютно бесполезный GC и добавили современные средства автоматики лежит именно в плоскости модели акторов и обеспечения автоматической реализации поведения взаимосвязей, используемых в ООП. И так в общем то какой вопрос не капни.
0
18822 / 9826 / 2401
Регистрация: 30.01.2014
Сообщений: 17,260
09.04.2020, 12:48 12
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
через вызов другого конструктора.
В данном случае инициализация выполняется точно так же, как она выполняется в языке С. Без участия каких-либо конструкторов.

Timurs, если бы язык C++ был исключительно ООП-языком, то эта логика с вездесущими конструкторами имела бы силу. Однако С++ в одинаковой мере поддерживает несколько разных парадигм программирования, в рамках которых существуют разные виды инициализации. В данном случае то, что вам говорит Fulcrum_013 по поводу конструкторов, не находит подтверждения в спецификации языка. Это его личное видение ситуации.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 12:56 13
Цитата Сообщение от DrOffset Посмотреть сообщение
Без участия каких-либо конструкторов.
Без участия не бывает. Бывает с участием неявно сгенерированного заинлайненного - т.е. как отдельной функции с телом и адресом его нет, а от явно написанного заинлайненнго его не отличить. Т.е. суслика не видите, а на самом деле он есть.

Добавлено через 2 минуты
DrOffset, Если бы С++ не был ООП языком, то и поддержка остальных "парадигм" ему была бы не нужна. Все что есть остальное нужно исключительно для упрощения реализации крупных ООП иерархий, особенно метапрограммирование.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.04.2020, 13:03 14
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
концептуально считается что конструктор есть у всего
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет, не считается. Конструкторы в С++ есть только у класс-типов.
нет, считается. концептуально.
видимо не все понимают смысл слова "концепция".

следующий код иллюстрирует идею:
инициализация объекта конструктором без параметров:

C++
1
2
3
4
template<class T> void foo()
{
    T value = T(); 
}
тот факт, что для примитивных типов аля int вызов конструкторов получится фейковым,
не играет никакой роли для самой концепции: для строительства любого объекта можно позвать конструктор.
даже если он фейковый.

Цитата Сообщение от DrOffset Посмотреть сообщение
Для некоторых типов в С++ также может быть предусмотрена агрегатная инициализация, она не задействует конструктор.
не задйствует юзерский конструктор.

однако сама по себе "агрегатная инициализация"
принципиально ничем не отличается от дефолтных конструкторов,
которые компилятор генерит по умолчанию.
0
Вездепух
Эксперт CЭксперт С++
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
09.04.2020, 13:20 15
Цитата Сообщение от hoggy Посмотреть сообщение
однако сама по себе "агрегатная инициализация"
принципиально ничем не отличается от дефолтных конструкторов,
которые компилятор генерит по умолчанию.
Нет, конечно: отличается и очень сильно.

Агрегатная инициализация ещё со времён С работает по принципу "все или ничего". Частичная инициализация агрегата пользователем всегда приводит к его полной инициализации (напр. к обнулению).

Никогда и нигде в С++ компилятор не генерирует таких дефолтных конструкторов. То есть ничего общего между этими типами инициализации нет.
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.04.2020, 13:39 16
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
отличается и очень сильно.
Агрегатная инициализация ещё со времён С работает по принципу "все или ничего". Частичная инициализация агрегата пользователем всегда приводит к его полной инициализации (напр. к обнулению). Никогда и нигде компилятор не генерирует таких дефолтных конструкторов. То есть ничего общего между этими типами инициализации нет.
да любая форма инициализации приводит к полной инициализации памяти объекта.
даже если это - ничего не делающий юзерский конструктор.
даже если при этом часть дата-членов класса по итогу будут содержать мусор.

например:

C++
1
2
3
4
5
6
7
8
9
10
11
struct some
{
    some(): foo()
    {
        // здесь объект полностью проинициализирован
        // и не важно, что не вся память была заполнена чем то осмысленным
    }
 
    std::string foo;
    int bar;
};
компилятору, встретив агрегатную инициализацию,
ничего не мешает сгенерировать функцию инициализации.

абсолютно точно так же, как ничего не мешает не генерировать никаких дефолтно-умолчательных конструторов,
а прямо по месту инлайном заполнить память первичными значениями.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Никогда и нигде компилятор не генерирует таких дефолтных конструкторов.
рассмотрим пример:

C++
1
2
3
4
5
6
7
8
9
struct some
{
    int a;
};
 
int main()
{
    some a; // <--- в этом случае он что сгенерирует?
}
пустой, нафиг никому не упавший конструктор?

"конструктор, генерируемый компилятором по умолчанию" - это такой же фейк,
как и вызов явного конструктора для int

это - дизайнерский сахар, который нужен человеку,
что бы понимать: в каких случаях,
что и чем будет проинициализированно.

а вот как именно это будет сделанно:
то бишь, как именно компилятор реализует это в техническом плане - это совершенно не принципиальный момент для языка.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 13:43 17
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
template <class T> struct foo {
    T a = T();
};
 
int main()
{    
    std::cout << foo<int>().a << std::endl;
    
}
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Никогда и нигде в С++ компилятор не генерирует таких дефолтных конструкторов. То есть ничего общего между этими типами инициализации нет.
Если у примитивных типов нет конструкторов то что тогда вызывается в 3-ей строке? При этом не просто вызывается а еще и запихивает в a 0?
0
Вездепух
Эксперт CЭксперт С++
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
09.04.2020, 19:11 18
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
сли у примитивных типов нет конструкторов то что тогда вызывается в 3-ей строке? При этом не просто вызывается а еще и запихивает в a 0?
"Вызывается"? Абсолютно ничего не вызывается. Даже странно слышать такой вопрос. Вы, наверное, наивно подумали, что () - это похоже на вызов функции, значит тут что-то "вызывается". Нет, () - это инициализатор (точно так же как, например, {} в таком контексте - инициализатор). Никакие "вызовы" тут ни при чем.

Синтаксисы T() и T{} в языке С++ - это синтаксисы преобразования типа в функциональной нотации, которые работают по правилам инициализации. Правила инициализации для типа int говорят, что инициализатор () для типа int порождает значение 0.

Все. Никаких "конструкторов" и никаких "вызовов" в этом процессе даже отдаленно не упоминается.

---

Вы лучше сами подумайте: если у типа int конструктор по умолчанию, обнуляющий значение, почему же он тогда не обнуляет локальные переменные, объявленные как int a?
2
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
09.04.2020, 19:22 19
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"Вызывается"? Абсолютно ничего не вызывается.
Если ничто не вызывается то каким оброзом оно в a запихнуло ноль? Опять же как это оно не вызывается если там явно написан вызов?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы, наверное, наивно подумали, что () - это похоже на вызов функции, значит тут что-то "вызывается". Нет, () - это инициализатор (точно так же как, например, {} в таком контексте - инициализатор). Никакие "вызовы" тут ни при чем.
На самом деле тут не при чем тот факт что этот вызов выбросился/заинлайнился и т.д. детали его реалтзации. Сам вызов есть.
Если там будет не int а SuperDuperMegaClassType там уже инлайном пахнуть не будет ни в коем разе. т.е. сказать что вызова нет уже нельзя.
Именно по пути стирания этой разницы плюсы и идут иначе никакого вменяемого метапрограммирования не будет в принципе - абсолютно все придется специализировать отдельно для тривиальных типов и для классов. По всей видимости на начальном этапе так и затевали (а откуда тогда в шаблонах два кейворда для аргументов-типов?) но потом поняли что идтить то надо к концепции единообразия.
0
Вездепух
Эксперт CЭксперт С++
11689 / 6368 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
09.04.2020, 19:34 20
Цитата Сообщение от hoggy Посмотреть сообщение
да любая форма инициализации приводит к полной инициализации памяти объекта.
даже если это - ничего не делающий юзерский конструктор.
даже если при этом часть дата-членов класса по итогу будут содержать мусор.
Абсолютно, грубейше не верно. Между неинициализированными объектами и инициализированными объектами (путь даже мусором в последнем случае) в С и С++ существует гигантское фундаментальное отличие.

Инициализированный объект гарантированно имеет стабильное значение (determinate value). Последовательные чтения значения инициализированного объекта гарантируют чтение одного и то же значения - того, которым объект был инициализирован.

Неинициализированный объект имеет indeterminate value. Последовательные чтения indeterminate value не гарантируют стабильности значения: последовательные чтения одного и то же объекта могут читать разные значения, в том числе trap representations.

---

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если ничто не вызывается то каким оброзом оно в a запихнуло ноль?
Так вы же вами его туда запихнули. Выражение в правой части для типа int - это именно одна из форм записи 0. Синтаксический сахар. Я это ясно объяснил выше.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Опять же как это оно не вызывается если там явно написан вызов?
"явно написан вызов" - я подробно объяснил в своем предыдущем ответе, что никакого "вызова" там нет. (Вы несете чушь уровня "детский сад", вроде "пионэров", которые не в состоянии отличить "оператор запятая" от просто запятой.)

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
На самом деле тут не при чем тот факт что этот вызов выбросился/заинлайнился и т.д. детали его реалтзации. Сам вызов есть.
Это - полная чушь. Это ваши "теории", никакого отношения к С++ не имеющие.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы лучше сами подумайте: если у типа int конструктор по умолчанию, обнуляющий значение, почему же он тогда не обнуляет локальные переменные, объявленные как int a?
... "а в ответ - тишина". Видимо, идет срочное развитие "теорий" )))
2
09.04.2020, 19:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2020, 19:34
Помогаю со студенческими работами здесь

Инициализация массива объектов через конструктор
class some { public: some(){} some(int b):a(b){} void Set(int b){a=b;} private: int...

Инициализация массива через конструктор. Вопрос.
Всем привет. Есть скудная вытяжка из методички: &quot;Массив объектов В случае, когда возникает...

Инициализация полей в структуре через его конструктор
Необходимо инициализировать массив в структуре нулями если будет вызывается конструктор структуры с...

Инициализация объектов через конструктор(объясните в чём ошибка)
Вот программа! #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class GradeBook {...

JavaScript!? Инициализация многомерного массива?
JavaScript, как правильно инициализировать многомерный массив? // var quest= , ] - это такой...

Конструктор на Javascript
Доброго времени суток, форумчане. Помогите, пожалуйста, подскажите (направьте в каком направлении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru