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

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

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

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

02.07.2015, 10:35. Просмотров 1513. Ответов 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
daslex
1290 / 534 / 110
Регистрация: 02.08.2011
Сообщений: 2,756
02.07.2015, 22:41 #16

Не по теме:

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



Добавлено через 2 минуты
C++
1
2
int n = 123;
    int m=1234;  //Вот это как?
0
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
02.07.2015, 22:41 #17

Не по теме:

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



Добавлено через 21 секунду
Цитата Сообщение от daslex Посмотреть сообщение
//Вот это как?
не понял вопроса
0
daslex
1290 / 534 / 110
Регистрация: 02.08.2011
Сообщений: 2,756
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;
}
0
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
02.07.2015, 22:48 #19
Цитата Сообщение от daslex Посмотреть сообщение
И что означает не может быть доступа к памяти, это С++?
В С++ имея стартовый указатель я могу обойти всю доступную программе память. Даже память других объектов, даже объектов других классов, даже могу дергать виртуальные функции других классов через таблицу виртуальных функций. В других языках такого не сделаешь, но не в С++.

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

Не по теме:

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

0
Kastaneda
Jesus loves me
Эксперт С++
4756 / 2960 / 243
Регистрация: 12.12.2009
Сообщений: 7,516
Записей в блоге: 2
Завершенные тесты: 1
02.07.2015, 22:53 #21
Цитата Сообщение от daslex Посмотреть сообщение
Только не можете получить размер массива
Да, но память то доступна для чтения, мы ж с этого начали.

Добавлено через 1 минуту
Цитата Сообщение от daslex Посмотреть сообщение
Размер массива хранится в памяти
Вообще говоря не совсем так. Хранится размер динамически выделенной памяти, размер массива, созданного на стеке, не хранится.
1
daslex
1290 / 534 / 110
Регистрация: 02.08.2011
Сообщений: 2,756
02.07.2015, 23:03 #22
не помню, чтоб с этого начинал. я начал с того, что все забыли о ТС, потом сказал о том, что ... Но не о памяти, доступной и недоступной для чтения.

А Стандарт дает гарантию, что я могу получать доступ к каждому последующему элементу класса, как у Вас в примере, что данные класса хранятся упорядоченно? Я не спорю сейчас, просто увидел новую для себя синтаксическую конструкцию, хорошо бы еще узнать расшифровку return *(int*)this; и почему это срабатывает.

И еще как оно сработает если в классе указатели, а не int, например указатели на int, каждый из которых указывает на массив. (Я, наверное, и сам посмотреть смогу, но пока буду смотреть, спать завалитесь )
0
hoggy
6860 / 3067 / 525
Регистрация: 15.11.2014
Сообщений: 6,963
Завершенные тесты: 1
03.07.2015, 00:48 #23
Цитата Сообщение от Kastaneda Посмотреть сообщение
"Порождает" я понимаю как "выделяет под него память и инициализирует", хотя за выделение памяти отвечает компилятор (либо специальная функция, если память выделяется динамически).
во-первых,
я специально использовал слово-сочетание "если утрировать".
я принял допущение, что бы упростить тезис, что бы его смог понять новичок.

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

но при этом вы смотрите на вещи с точки зрения работы компилятора,
а не с точки зрения самого языка.

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

пример такой позиции:

"Имя обозначает (денотирует) объект, функцию, тип, значение или метку. Имя вводится в программе описанием (#8). Имя может использоваться только внутри области текста программы, называемой его областью видимости. Имя имеет тип, определяющий его использование. Объект - это область памяти. Объект имеет класс памяти, определяющий его время жизни. Смысл значения, обнаруженного в объекте, определяется типом имени, использованного для доступа к нему"(ц)Страуструп.
с точки языка, конструктор можно рассматривать,
как функцию, задача которой - построить объект.

результат успешной работы конструктора - это объект.
именно это описывается в исходном коде.


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

Добавлено через 15 минут
Цитата Сообщение от daslex Посмотреть сообщение
Только не можете получить размер массива, имея указатель на его начало и не зная его размера. Или Обойдёте? Размер массива хранится в памяти.
http://rextester.com/OZKD92461

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//Title of this code
//Compiler Version 18.00.21005.1 for x86
 
#include <iostream>
 
int main()
{
    std::cout << "Hello, world!\n";
    
    // --- информация о размере массива, 
    // и всех его размерностях известна времени компиляции
    // поэтому, нет ни одной причины хранить её в рантайме
    int ar[]={1,2,3};
    
    std::cout<<"size of array = " <<sizeof(ar)
        <<": elements = " << sizeof(ar)/sizeof(ar[0])
        <<'\n';
    
    
    // --- строго говоря, на языке с++ не существует динамических массивов
    // однако, часто так называют динамически 
    // выделяемые непрерывные блоки памяти
    
    size_t count = 10;
    int* dynArr = new int[count];
    
    // --- обратите внимание: 
    // мы не сообщали информацию о количестве элементов
    // тем не менее, компилятор каким то образом узнает эту рантайм информацию
    // как он это делает?
    delete[] dynArr;
    
    // --- стандарт оставляет это на откуп компиляторов
    // поэтому, рецепт получания данных - зависит от платформы.
    // например, для visual studio это можно сделать вот так:
    
    dynArr = new int[count];
    std::cout<<"size of array = " << _msize(dynArr) 
        <<": elements = " << _msize(dynArr) /sizeof(dynArr[0])
        <<'\n';
    
    delete[] dynArr;
    
    // --- ну и напоследок: некоторые ошибочно думают,
    // операция выделения памяти: new int[count];
    // выделяет sizeof(int[count]) памяти
    // это не верно.
    // единственное, что гарантирует стандарт - что её будет не меньше, 
    // чем было затребованно.
    // но реально может быть выделенно больше.
    // поэтому, приведенный выше код определения количества элементов
    // с использовании _msize, либо её аналогами для других платформ
    // теоретически может отработать не верно
}
1
Voivoid
03.07.2015, 08:17
  #24

Не по теме:

Цитата Сообщение от daslex Посмотреть сообщение
Проблема киберфорума в том, что часто стали забывать о ТС и неплохие специалисты конструктивно общаются на своем языке между собой.
Да этот вопрос никому не интересен, даже самому ТС, иначе он бы сам нашел ответ в книжках или нагуглил бы. По мне так разного рода оффтопик обсуждения всяко интереснее чем очередное перетирание того, как найти максимальный элемент в массиве.

0
Croessmah
Ушел
13777 / 8027 / 927
Регистрация: 27.09.2012
Сообщений: 19,785
Записей в блоге: 3
Завершенные тесты: 1
03.07.2015, 08:26 #25
Voivoid, согласен. А вот я вообще вопроса ТС не понял... Какие такие map, enemy...
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
03.07.2015, 08:34 #26
Цитата Сообщение от hoggy Посмотреть сообщение
потому что семантика фразы "распознается по имени"
явно указывает на наличие этого самого имени.
Отнюдь. Примеры:
- Направление на север распознается по мху на камне. Но мох у камня, а не у севера или направления.
- Утечка газа распознается по запаху. Но сам газ не имеет запаха, запах придается одорантом.
Суть в том, что признак, по которому мы что-то пытаемся распознать может быть косвенным, и по факту не принадлежать распознаваемой сущности.
Цитата Сообщение от hoggy Посмотреть сообщение
стандарт намекает: конструкторы вообще не являются функциями-членами.
И именно по этому глава 12 Стандарта, описывающая в параграфе 12.1 конструкторы, называется Special member functions.
Цитата Сообщение от daslex Посмотреть сообщение
название класса, прописанное в public: и синтаксис его как у функции, то это - конструктор
Конструктор совершенно спокойно может быть и в private, и protected секции.
Синтаксис не допускает указания возвращаемого типа. Уже хотя бы поэтому он не такой как у функции.
Цитата Сообщение от daslex Посмотреть сообщение
Проблема киберфорума в том
Цитата Сообщение от daslex Посмотреть сообщение
что ТС не может понять что такое конструктор.
По причине того, что ТС не хочет открыть учебник и ознакомиться с базовыми понятия языка.
Цитата Сообщение от hoggy Посмотреть сообщение
что бы смотреть на вещи с позиции именно языка,
Вот сразу вспомнилась тема про утечки памяти. Почему-то там ты с этим подходом категорически был не согласен.
Цитата Сообщение от Voivoid Посмотреть сообщение
разного рода оффтопик обсуждения всяко интереснее ...
Однозначно!

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Какие такие map, enemy...
ТС, похоже, из игровой вселенной сюда заглянул. Может и вопрос его к каким-то другим конструкторам относится, а не к C++'ным.
0
SatanaXIII
Супер-модератор
Эксперт С++
5694 / 2749 / 258
Регистрация: 01.11.2011
Сообщений: 6,710
Завершенные тесты: 1
03.07.2015, 08:59 #27
Цитата Сообщение от Croessmah Посмотреть сообщение
Какие такие map, enemy
Ноги тс растут из вот этой темы: http://www.cyberforum.ru/cpp-beginners/thread1491411.html
0
Croessmah
Ушел
13777 / 8027 / 927
Регистрация: 27.09.2012
Сообщений: 19,785
Записей в блоге: 3
Завершенные тесты: 1
03.07.2015, 09:05 #28
SatanaXIII, а, ну это ж из дебилоидного урока с ютюба код, да?
Тогда всё ясно и утверждение
По причине того, что ТС не хочет открыть учебник и ознакомиться с базовыми понятия языка
is true
0
Kastaneda
03.07.2015, 09:11
  #29

Не по теме:

Croessmah, откуда такие познания в области дебилоидных уроков с ютуба?

0
Croessmah
03.07.2015, 09:16     Что такое конструктор?
  #30

Не по теме:

Kastaneda, относительно конкретно этого урока, то искал на ютюбе видосики по возможностям sfml в связке с box2d, накнулся на чудо-юдо-урок )))
Что касается других уроков, то у меня даже тема есть Парочка полезных видеоуроков по C++

0
03.07.2015, 09:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2015, 09:16
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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