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

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

02.07.2015, 10:35. Показов 3261. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru