Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 15

Что такое конструктор?

02.07.2015, 10:35. Показов 3149. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Конструктор - это такие детали , как map , player, enemy.Я правильно понял?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2015, 10:35
Ответы с готовыми решениями:

что такое конструктор?
Обьясните плиз что такое конструктор? Это функция а что она делает и для чего?

Что такое конструктор копий?
Объясните, пожалуйста, на максимально простом языке, чем отличается конструктор от конструктора копий? Может это и одно и то же, хотя...

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

41
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
02.07.2015, 10:46
Конструктор - это специальная функция член класса, имеющая имя, совпадающее с именем класса и не имеющая типа возвращаемого значения.
Автоматически вызывается при создании объекта класса для инициализации этого объекта.
0
 Аватар для rjxk
7 / 7 / 9
Регистрация: 18.06.2015
Сообщений: 30
02.07.2015, 10:47
surveyor2015, Конструкторы (C++)
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
02.07.2015, 11:10
Цитата Сообщение от Cra3y Посмотреть сообщение
Конструктор - это специальная функция член класса, имеющая имя, совпадающее с именем класса
конструктор не имеет имени
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
02.07.2015, 12:41
Цитата Сообщение от Croessmah Посмотреть сообщение
конструктор не имеет имени
Конструктор это и есть его имя. Х)

Не по теме:

- У Кутузова был один глаз.
- Нет! У Кутузова не было одного глаза.



 Комментарий модератора 
surveyor2015, называйте темы так, чтобы было понятно из названия о какой проблеме пойдет речь.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
02.07.2015, 12:46
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конструктор это и есть его имя. Х)
12.1
1. Constructors do not have names. A special declarator syntax is used to declare or define the constructor.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 18:41
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конструктор это и есть его имя. Х)
Не, это должность.

Добавлено через 12 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Constructors do not have names.
Глупая какая-то формулировка. Всякий знает из книжки Страуструпа, что
Цитата Сообщение от Cra3y Посмотреть сообщение
Конструктор - это специальная функция-член класса, имеющая имя, совпадающее с именем класса
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.07.2015, 19:38
Цитата Сообщение от Mr.X Посмотреть сообщение
Всякий знает из книжки Страуструпа, что
Вот подсмотрел в третьем издании (10.2.3):
Конструктор распознается по имени, которое совпадает с именем самого класса.
Можно ли из этого высказывания сделать вывод, что конструктор имеет имя?
С одной стороны, да (и это кажется наиболее очевидным). С другой - нет, т.к. "распознается по" не значит, что "имеет".
Ну и всё же, полагаться надо на Стандарт в конечном итоге. А не на Страуструпа, тем более в переводе на русский.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 20:05
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну и всё же, полагаться надо на Стандарт в конечном итоге. А не на Страуструпа
Да ладно! Наш Страуструп в любой момент ваш стандарт одной левой переписать может, а вот ваш стандарт его - нет!
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
02.07.2015, 20:17
Цитата Сообщение от Mr.X Посмотреть сообщение
Да ладно! Наш Страуструп в любой момент ваш стандарт одной левой переписать может, а вот ваш стандарт его - нет!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.07.2015, 20:44
Цитата Сообщение от surveyor2015 Посмотреть сообщение
Конструктор - это такие детали , как map , player, enemy.Я правильно понял?
если утрировать, то конструктор можно рассматривать,
как функцию, которая порождает объект.

результат работы конструктора - это объект.

C++
1
2
3
auto obj = some(param); <--- конструктор класса some запускается с параметрами param
// в результате успешной работы получаем объект по имени obj, 
// являющийся экземпляром класса some



Цитата Сообщение от Tulosba Посмотреть сообщение
распознается по имени
Цитата Сообщение от Tulosba Посмотреть сообщение
С другой - нет, т.к. "распознается по" не значит, что "имеет".
если первое утверждение - истина,
то из него вытекает,
что второе утверждение - ложь.

потому что семантика фразы "распознается по имени"
явно указывает на наличие этого самого имени.

нельзя распознать нечто по имени, которого нет.

что касается стандарта:
Constructors do not have names. A special declarator syntax is used to declare or define the constructor.
стандарт намекает: конструкторы вообще не являются функциями-членами.

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

он имеет ряд принципиальных отличий,
и подчиняется совсем другим правилам.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
02.07.2015, 21:03
Проблема киберфорума в том, что часто стали забывать о ТС и неплохие специалисты конструктивно общаются на своем языке между собой.

Какая разница имеет он имя или не имеет, если видим внутри класса название класса, прописанное в public: и синтаксис его как у функции, то это - конструктор. Всё остальное пустая трата времени. Проблема не в этом, проблема в том, что ТС не может понять что такое конструктор.

Че Вы спорите по какой-то фигне.
1
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.07.2015, 21:48
Цитата Сообщение от hoggy Посмотреть сообщение
если утрировать, то конструктор можно рассматривать,
как функцию, которая порождает объект.
"Порождает" я понимаю как "выделяет под него память и инициализирует", хотя за выделение памяти отвечает компилятор (либо специальная функция, если память выделяется динамически). Поэтому можно сказать, что задача конструктора просто инициализировать переданный ему кусок памяти. При этом инициализация может произойти еще до входа в тело конструктора, а конструктор может делать совершенно другие вещи, т.е. утверждение выше не совсем верно.
Таким образом я бы дал такое определение: конструктор - это функция, которая гарантировано будет вызвана (явно/неявно) при создании объекта и которая имеет доступ к памяти, занимаемой объектом.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
Проблема киберфорума в том
Это проблема вообще всех российских форумов, а точнее людей, обитающих на этих форумах. Наверное менталитет у нас такой. На буржуйских IT форумах довольно сухое общение, можно сказать даже скучное :)

0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
02.07.2015, 22:15
Kastaneda, А вот и не факт, что доступ к памяти будет, например, если это наследник, то приват от родителя в классе будет, а доступа к этому привату не будет. (не очень я уверен, но похоже, что так). Если это так, то такая вот неточность в конце концов способна привести к холивару как и холивар с именем конструктора. Ну или к неправильному пониманию некоторых деталей.

И это не функция., ибо функция всегда возвращает значение, либо имеет тип void, Ваша формулировка удобна, но с технической т.з. она в корне неправильна.
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.07.2015, 22:36
Цитата Сообщение от daslex Посмотреть сообщение
А вот и не факт, что доступ к памяти будет, например, если это наследник, то приват от родителя в классе будет, а доступа к этому привату не будет. (не очень я уверен, но похоже, что так)
Это С++, тут не может не быть доступа к памяти.
Пример притянут за уши, но показывает суть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class base
{
private:
    int n = 123;
};
 
class derived : base
{
public:
    int get_base_private_n()
    {
        return *(int*)this;
    }
};
 
int main()
{
    derived d;
    std::cout << d.get_base_private_n() << std::endl;
}
demo
Цитата Сообщение от daslex Посмотреть сообщение
И это не функция., ибо функция всегда возвращает значение, либо имеет тип void
Ок, пусть будет процедура.
Цитата Сообщение от daslex Посмотреть сообщение
Ваша формулировка удобна, но с технической т.з. она в корне неправильна.
Мне кажется с точностью наоборот. Либо привидите правильную.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
02.07.2015, 22:41

Не по теме:

Неудобна и правильна?



Добавлено через 2 минуты
C++
1
2
int n = 123;
    int m=1234;  //Вот это как?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.07.2015, 22:41

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
Неудобна и правильна?
не не, не надо начинать к словам цепляться, мы так не туда уйдем :)



Добавлено через 21 секунду
Цитата Сообщение от daslex Посмотреть сообщение
//Вот это как?
не понял вопроса
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
02.07.2015, 22:44
И что означает не может быть доступа к памяти, это С++? new delete размер массива.

Добавлено через 49 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class base
{
private:
    int n = 123;
    int m=1234; //Вот это вытащить в наследнике.
};
 
class derived : base
{
public:
    int get_base_private_n()
    {
        return *(int*)this;
    }
};
 
int main()
{
    derived d;
    std::cout << d.get_base_private_n() << std::endl;
}
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.07.2015, 22:48
Цитата Сообщение от daslex Посмотреть сообщение
И что означает не может быть доступа к памяти, это С++?
В С++ имея стартовый указатель я могу обойти всю доступную программе память. Даже память других объектов, даже объектов других классов, даже могу дергать виртуальные функции других классов через таблицу виртуальных функций. В других языках такого не сделаешь, но не в С++.

Добавлено через 2 минуты
Цитата Сообщение от daslex Посмотреть сообщение
//Вот это вытащить в наследнике.
Тыц, правда тут уже нет 100% гарантии, компилятор может алаймент сделать, но в данном случае работает.
1
02.07.2015, 22:49

Не по теме:

Только не можете получить размер массива, имея указатель на его начало и не зная его размера. Или Обойдёте? Размер массива хранится в памяти.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2015, 22:49
Помогаю со студенческими работами здесь

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель?
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

Что такое фиктивный конструктор?
Сабж. function f() {}; //Определить фиктивный конструктор Добавлено через 7 минут а точнее вот эти строки: function f() {};...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru