Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
surveyor2015
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 15
#1

Что такое конструктор? - C++

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

Конструктор - это такие детали , как map , player, enemy.Я правильно понял?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2015, 10:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое конструктор? (C++):

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

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

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

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

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

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

41
Max Dark
шКодер самоучка
1852 / 1652 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
02.07.2015, 10:46 #2
Конструктор - это специальная функция член класса, имеющая имя, совпадающее с именем класса и не имеющая типа возвращаемого значения.
Автоматически вызывается при создании объекта класса для инициализации этого объекта.
0
rjxk
7 / 7 / 6
Регистрация: 18.06.2015
Сообщений: 30
02.07.2015, 10:47 #3
surveyor2015, Конструкторы (C++)
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.07.2015, 11:10 #4
Цитата Сообщение от Cra3y Посмотреть сообщение
Конструктор - это специальная функция член класса, имеющая имя, совпадающее с именем класса
конструктор не имеет имени
0
SatanaXIII
Супер-модератор
Эксперт С++
5640 / 2675 / 252
Регистрация: 01.11.2011
Сообщений: 6,572
Завершенные тесты: 1
02.07.2015, 12:41 #5
Цитата Сообщение от Croessmah Посмотреть сообщение
конструктор не имеет имени
Конструктор это и есть его имя. Х)

Не по теме:

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



 Комментарий модератора 
surveyor2015, называйте темы так, чтобы было понятно из названия о какой проблеме пойдет речь.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
02.07.2015, 12:46 #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конструктор это и есть его имя. Х)
12.1
1. Constructors do not have names. A special declarator syntax is used to declare or define the constructor.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 18:41 #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конструктор это и есть его имя. Х)
Не, это должность.

Добавлено через 12 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Constructors do not have names.
Глупая какая-то формулировка. Всякий знает из книжки Страуструпа, что
Цитата Сообщение от Cra3y Посмотреть сообщение
Конструктор - это специальная функция-член класса, имеющая имя, совпадающее с именем класса
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.07.2015, 19:38 #8
Цитата Сообщение от Mr.X Посмотреть сообщение
Всякий знает из книжки Страуструпа, что
Вот подсмотрел в третьем издании (10.2.3):
Конструктор распознается по имени, которое совпадает с именем самого класса.
Можно ли из этого высказывания сделать вывод, что конструктор имеет имя?
С одной стороны, да (и это кажется наиболее очевидным). С другой - нет, т.к. "распознается по" не значит, что "имеет".
Ну и всё же, полагаться надо на Стандарт в конечном итоге. А не на Страуструпа, тем более в переводе на русский.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
02.07.2015, 20:05 #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну и всё же, полагаться надо на Стандарт в конечном итоге. А не на Страуструпа
Да ладно! Наш Страуструп в любой момент ваш стандарт одной левой переписать может, а вот ваш стандарт его - нет!
0
rikimaru2013
C++ Game Dev
2440 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
02.07.2015, 20:17 #10
Цитата Сообщение от Mr.X Посмотреть сообщение
Да ладно! Наш Страуструп в любой момент ваш стандарт одной левой переписать может, а вот ваш стандарт его - нет!
Что такое конструктор?
0
hoggy
6718 / 2903 / 497
Регистрация: 15.11.2014
Сообщений: 6,534
Завершенные тесты: 1
02.07.2015, 20:44 #11
Цитата Сообщение от 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
daslex
1286 / 530 / 109
Регистрация: 02.08.2011
Сообщений: 2,750
02.07.2015, 21:03 #12
Проблема киберфорума в том, что часто стали забывать о ТС и неплохие специалисты конструктивно общаются на своем языке между собой.

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

Че Вы спорите по какой-то фигне.
1
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
02.07.2015, 21:48 #13
Цитата Сообщение от hoggy Посмотреть сообщение
если утрировать, то конструктор можно рассматривать,
как функцию, которая порождает объект.
"Порождает" я понимаю как "выделяет под него память и инициализирует", хотя за выделение памяти отвечает компилятор (либо специальная функция, если память выделяется динамически). Поэтому можно сказать, что задача конструктора просто инициализировать переданный ему кусок памяти. При этом инициализация может произойти еще до входа в тело конструктора, а конструктор может делать совершенно другие вещи, т.е. утверждение выше не совсем верно.
Таким образом я бы дал такое определение: конструктор - это функция, которая гарантировано будет вызвана (явно/неявно) при создании объекта и которая имеет доступ к памяти, занимаемой объектом.

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

Не по теме:

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

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

И это не функция., ибо функция всегда возвращает значение, либо имеет тип void, Ваша формулировка удобна, но с технической т.з. она в корне неправильна.
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,386
Записей в блоге: 2
Завершенные тесты: 1
02.07.2015, 22:36 #15
Цитата Сообщение от 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
02.07.2015, 22:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2015, 22:36
Привет! Вот еще темы с ответами:

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

Что можно сделать, что бы конструктор вызывался один раз при агрегировании? - C++
Добрый день. Написал код, но два раза подряд вызывается конструктор, так как создаю объект в другом классе.. Что можно сделать, что бы...

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

Что такое перегрузка оператора? Что у меня в коде за ошибка? - C++
Что же я написал?? Что оно не компилится? Что значит error C2275: Superclass: недопустимое использование этого типа в качестве выражения ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.