Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
surveyor2015
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 15
02.07.2015, 10:35     Что такое конструктор? #1
Конструктор - это такие детали , как map , player, enemy.Я правильно понял?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
02.07.2015, 10:46     Что такое конструктор? #2
Конструктор - это специальная функция член класса, имеющая имя, совпадающее с именем класса и не имеющая типа возвращаемого значения.
Автоматически вызывается при создании объекта класса для инициализации этого объекта.
rjxk
 Аватар для rjxk
7 / 7 / 6
Регистрация: 18.06.2015
Сообщений: 30
02.07.2015, 10:47     Что такое конструктор? #3
surveyor2015, Конструкторы (C++)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
02.07.2015, 11:10     Что такое конструктор? #4
Цитата Сообщение от Cra3y Посмотреть сообщение
Конструктор - это специальная функция член класса, имеющая имя, совпадающее с именем класса
конструктор не имеет имени
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
02.07.2015, 12:41     Что такое конструктор? #5
Цитата Сообщение от Croessmah Посмотреть сообщение
конструктор не имеет имени
Конструктор это и есть его имя. Х)

Не по теме:

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



 Комментарий модератора 
surveyor2015, называйте темы так, чтобы было понятно из названия о какой проблеме пойдет речь.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 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.
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
02.07.2015, 18:41     Что такое конструктор? #7
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конструктор это и есть его имя. Х)
Не, это должность.

Добавлено через 12 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Constructors do not have names.
Глупая какая-то формулировка. Всякий знает из книжки Страуструпа, что
Цитата Сообщение от Cra3y Посмотреть сообщение
Конструктор - это специальная функция-член класса, имеющая имя, совпадающее с именем класса
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.07.2015, 19:38     Что такое конструктор? #8
Цитата Сообщение от Mr.X Посмотреть сообщение
Всякий знает из книжки Страуструпа, что
Вот подсмотрел в третьем издании (10.2.3):
Конструктор распознается по имени, которое совпадает с именем самого класса.
Можно ли из этого высказывания сделать вывод, что конструктор имеет имя?
С одной стороны, да (и это кажется наиболее очевидным). С другой - нет, т.к. "распознается по" не значит, что "имеет".
Ну и всё же, полагаться надо на Стандарт в конечном итоге. А не на Страуструпа, тем более в переводе на русский.
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
02.07.2015, 20:05     Что такое конструктор? #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Ну и всё же, полагаться надо на Стандарт в конечном итоге. А не на Страуструпа
Да ладно! Наш Страуструп в любой момент ваш стандарт одной левой переписать может, а вот ваш стандарт его - нет!
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2135 / 968 / 223
Регистрация: 30.11.2013
Сообщений: 3,239
02.07.2015, 20:17     Что такое конструктор? #10
Цитата Сообщение от Mr.X Посмотреть сообщение
Да ладно! Наш Страуструп в любой момент ваш стандарт одной левой переписать может, а вот ваш стандарт его - нет!
Что такое конструктор?
hoggy
5228 / 2119 / 403
Регистрация: 15.11.2014
Сообщений: 4,806
Завершенные тесты: 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.
стандарт намекает: конструкторы вообще не являются функциями-членами.

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

он имеет ряд принципиальных отличий,
и подчиняется совсем другим правилам.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
02.07.2015, 21:03     Что такое конструктор? #12
Проблема киберфорума в том, что часто стали забывать о ТС и неплохие специалисты конструктивно общаются на своем языке между собой.

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

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

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

Не по теме:

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

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

И это не функция., ибо функция всегда возвращает значение, либо имеет тип void, Ваша формулировка удобна, но с технической т.з. она в корне неправильна.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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 Посмотреть сообщение
Ваша формулировка удобна, но с технической т.з. она в корне неправильна.
Мне кажется с точностью наоборот. Либо привидите правильную.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
02.07.2015, 22:41     Что такое конструктор? #16

Не по теме:

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



Добавлено через 2 минуты
C++
1
2
int n = 123;
    int m=1234;  //Вот это как?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
02.07.2015, 22:41     Что такое конструктор? #17

Не по теме:

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



Добавлено через 21 секунду
Цитата Сообщение от daslex Посмотреть сообщение
//Вот это как?
не понял вопроса
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
02.07.2015, 22:44     Что такое конструктор? #18
И что означает не может быть доступа к памяти, это С++? 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;
}
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
02.07.2015, 22:48     Что такое конструктор? #19
Цитата Сообщение от daslex Посмотреть сообщение
И что означает не может быть доступа к памяти, это С++?
В С++ имея стартовый указатель я могу обойти всю доступную программе память. Даже память других объектов, даже объектов других классов, даже могу дергать виртуальные функции других классов через таблицу виртуальных функций. В других языках такого не сделаешь, но не в С++.

Добавлено через 2 минуты
Цитата Сообщение от daslex Посмотреть сообщение
//Вот это вытащить в наследнике.
Тыц, правда тут уже нет 100% гарантии, компилятор может алаймент сделать, но в данном случае работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2015, 22:49     Что такое конструктор?
Еще ссылки по теме:

В этой части кода происходит объявление функций? Что такое void? Что в скобках? C++
C++ Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы C++

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

Или воспользуйтесь поиском по форуму:
daslex
02.07.2015, 22:49     Что такое конструктор?
  #20

Не по теме:

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

Yandex
Объявления
02.07.2015, 22:49     Что такое конструктор?
Ответ Создать тему
Опции темы

Текущее время: 01:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru