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

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

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

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

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

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

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

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

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

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

Что делает конструктор? - C++
Я очень плохо понял вобще. Он вроде помогает создать в памяти место для переменных обьявленых в классе?? В каких слуаях его лучше...

Что возвращает конструктор? - C++
Здравствуйте! Я не могу понять, как происходит присвоение вот здесь: object obj = object(10) object - класс, написанный программистом....

Объясните, что выполняет этот конструктор - C++
#include <iostream> #include <cstring> using namespace std; class Str { friend ostream& operator<<(ostream&, const Str&); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
03.07.2015, 10:29     Что такое конструктор? #31
Цитата Сообщение от Tulosba Посмотреть сообщение
и в private
В protected да, в private пример давай, компилируемый.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
03.07.2015, 10:46     Что такое конструктор? #32
Цитата Сообщение от daslex Посмотреть сообщение
В protected да, в private пример давай, компилируемый.
Раз: http://ideone.com/V322hA
Два: http://ideone.com/LVziiV

А может, если подумать, даже еще какой пример найдется
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 2
03.07.2015, 10:52     Что такое конструктор? #33
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
class single {
private:
    single() {}
    single(const single&) {}
    single& operator=(const single&) {}
public:
    static single *instance();
    int run() {
        cout << "hello" << endl;
    }
};
 
single* single::instance() {
    static single self;
    return &self;
}
 
int main() {
    single* ps = single::instance();
    return ps->run();
}
ideone.com/sggcLZ
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
03.07.2015, 10:55     Что такое конструктор? #34
А может, если подумать, даже еще какой пример найдется
Книга "Библиотека программиста", автора не помню. Там этих примеров вагон.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
03.07.2015, 11:24     Что такое конструктор? #35
Паразитирующий, да. глубоко засевший и никому не доступный?
hoggy
6461 / 2659 / 460
Регистрация: 15.11.2014
Сообщений: 5,850
Завершенные тесты: 1
03.07.2015, 12:23     Что такое конструктор? #36
Цитата Сообщение от Tulosba Посмотреть сообщение
Отнюдь. Примеры:
- Направление на север распознается по мху на камне. Но мох у камня, а не у севера или направления.
- Утечка газа распознается по запаху. Но сам газ не имеет запаха, запах придается одорантом.
Суть в том, что признак, по которому мы что-то пытаемся распознать может быть косвенным, и по факту не принадлежать распознаваемой сущности.
но не в данном случае.

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

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

вы не можете использовать тип там, где ожидается имя.
и наоборот: там, где ожидается имя, нельзя использовать тип.

пример:

C++
1
std::bind(&some::method, obj);
здесь:
some - обозначает тип
method - обозначает имя (функции-члена).

где нибудь в шаблонах, мы можем написать:

C++
1
std::bind(&T::method, obj);
в качестве параметра шаблона можно указывать тип, оставляя имя прежним.

но проделать аналогичное с именем функции-члена уже не получится.
C++
1
2
std::bind(&some::TNAME, obj); //<--- нельзя оторвать имя от типа, 
     //и передавать его как обособленный параметр

C++
1
2
3
4
5
auto obj = T(param); // <--- здесь фигурирует запуск конструктора, 
  // но не фигурирует (и не может фигурировать) имя функции этого конструктора
 
 // T не может быть лексемой со значением "имя".
 // потому что ожидается тип.
таким образом, конструктор распознается по типу конструируемого объекта,
и аргуменам, с которыми его хотят построить.
никаких имен конструкторов при этом не фигурирует.

Цитата Сообщение от Tulosba Посмотреть сообщение
Вот сразу вспомнилась тема про утечки памяти. Почему-то там ты с этим подходом категорически был не согласен.
не понятно, с чего вы это взяли, и какова связь с мемликами.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
03.07.2015, 13:24     Что такое конструктор? #37
Цитата Сообщение от hoggy Посмотреть сообщение
согласно первому предложению получается,
что конструктор распознается по собственному имени.
Может по имени класса? Тогда все встает на свои места.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.07.2015, 14:13     Что такое конструктор? #38
Цитата Сообщение от hoggy Посмотреть сообщение
что конструктор распознается по собственному имени.
"собственному" в исходной цитате (пост #8) не было. Иначе принадлежность была бы очевидна.
Стандарт говорит, что конструктор имени не имеет. Точка.
C++
1
auto obj = T(param); // T - совершенно спокойно может быть функцией
Цитата Сообщение от hoggy Посмотреть сообщение
не понятно, с чего вы это взяли, и какова связь с мемликами.
Не с утечками дело, а с подходом к терминологии. Я и тогда, и сейчас опираюсь на термины языка C++.
Ты же апеллировал к ОС и прочим частным случаям, а сейчас вдруг хочешь "смотреть на вещи с позиции именно языка".
Меня это несколько удивило.
hoggy
6461 / 2659 / 460
Регистрация: 15.11.2014
Сообщений: 5,850
Завершенные тесты: 1
03.07.2015, 20:36     Что такое конструктор? #39
Цитата Сообщение от Kastaneda Посмотреть сообщение
Может по имени класса? Тогда все встает на свои места.
в этом случае сама фраза теряет смысл, скатываясь в тавтологию:
"Конструктор распознается по имени класса, которое совпадает с именем самого класса."

что это за ерунда?

если бы Страуструп хотел сказать,
что конструктор распознается по имени класса,
он бы так и написал.



Цитата Сообщение от Tulosba Посмотреть сообщение
"собственному" в исходной цитате (пост #8) не было. Иначе принадлежность была бы очевидна.
да, конечно.

Конструктор распознается по имени, которое совпадает с именем самого класса.
согласно формулировке, конструктор распознается не по имени класса,
а по имени, которое совпадает с именем класса.

то бишь, есть какое то другое имя,
которое совпадает с именем класса.

чьё же ещё это может быть имя,
в контексте обозначения конструктора?

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

Цитата Сообщение от Tulosba Посмотреть сообщение
Стандарт говорит, что конструктор имени не имеет. Точка.
Страуструп с вами не согласен.

Цитата Сообщение от Tulosba Посмотреть сообщение
auto obj = T(param); // T - совершенно спокойно может быть функцией
возможно, я привел не удачный пример.
действительно, в качестве параметра шаблона можно прокинуть имя объекта.
но при этом, приходится указывать его точный тип.
оторвать имя от типа все равно никак не получится.

C++
1
2
3
&T::M; //<--- нельзя сделать шаблон, 
// в который можно будет подставлять отдельно взятое имя M
// здесь только препроцессор спасает

Цитата Сообщение от Tulosba Посмотреть сообщение
а с подходом к терминологии.
мемлик имеет несколько формальных определений в зависимости от.
термины по определению не допускают многозначности.

вывод простой: мемлик - не термин.

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

Цитата Сообщение от Tulosba Посмотреть сообщение
Я и тогда, и сейчас опираюсь на термины языка C++.
в стандарте нигде не сказанно, что есть мемлик.
когда он есть, и когда его нет.


Цитата Сообщение от Tulosba Посмотреть сообщение
Ты же апеллировал к ОС и прочим частным случаям
разумеется.

Цитата Сообщение от Tulosba Посмотреть сообщение
а сейчас вдруг хочешь "смотреть на вещи с позиции именно языка".
Меня это несколько удивило.
с позиции языка:
мемлик - явление, которое не является частью языка.
Kastaneda
03.07.2015, 20:46
  #40

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
а не заниматься буквоедством
Ну что вы, никто тут буквоедством не занимается

Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.07.2015, 21:39     Что такое конструктор? #41
Цитата Сообщение от hoggy Посмотреть сообщение
в стандарте нигде не сказанно, что есть мемлик.
5.3.4/20:
... This is appropriate when the called allocation function does not allocate memory; otherwise, it is likely to result in a memory leak. ...
По слову "leak" найдешь ещё несколько пунктов в Стандарте, если соизволишь заглянуть туда.
Цитата Сообщение от hoggy Посмотреть сообщение
Страуструп с вами не согласен.
Учебник не должен дословно повторять Стандарт. А в некоторых случаях можно даже и приврать, если это поможет быстрее понять концепцию. Что в данном случае и было сделано автором.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2015, 02:20     Что такое конструктор?
Еще ссылки по теме:

Параметр rhs, что это и для чего (конструктор-копировщик) - C++
Вот код: #include &lt;iostream&gt; class jurnal { public: jurnal() { }

что такое Void - C++
Всем привет кто подскажет что такое Void.

что такое extern? - C++
что будет если не написать extern,если можно с примерами

Что такое return out? - C++
///

Что такое цикл? - C++
что значат эти строки? for (int i = n-1; i&gt;=0; i--) for(int j = 0; j&lt;10; j++){ min+=matr; index = 0; и ...


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

Или воспользуйтесь поиском по форуму:
hoggy
6461 / 2659 / 460
Регистрация: 15.11.2014
Сообщений: 5,850
Завершенные тесты: 1
04.07.2015, 02:20     Что такое конструктор? #42
Цитата Сообщение от Tulosba Посмотреть сообщение
This is appropriate when the called allocation function does not allocate memory; otherwise, it is likely to result in a memory leak. ...
"... может привести к утечке памяти..."

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

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

все остальные упоминания внезапно относятся
к эксперементальной секции мусоросборки:
http://en.cppreference.com/w/cpp/mem...lare_reachable

при этом нет ни одного примера:
что вот такая ситуация - это 100% утечка.

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


Цитата Сообщение от Tulosba Посмотреть сообщение
Учебник не должен дословно повторять Стандарт. А в некоторых случаях можно даже и приврать, если это поможет быстрее понять концепцию. Что в данном случае и было сделано автором.
огА.
Yandex
Объявления
04.07.2015, 02:20     Что такое конструктор?
Ответ Создать тему
Опции темы

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