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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Вывести студентов, имеющих средний балл от 3 до 4.5 http://www.cyberforum.ru/cpp-beginners/thread1491642.html
Простая программа, вывода студентов (до 20 человек), имеющих средний балл от 3 до 4.5. Кто скинет исходник, буду оч благодарен пацы.
C++ Найти ошибку при формировании нового массива из двух #include <iostream> using namespace std; int main() { int arr1, arr2, rez; printf ("Vvedite elementi 1 massiva (cherezprobel):"); for(int i=0; i<10; ++i) { scanf ("%d",&arr1); } http://www.cyberforum.ru/cpp-beginners/thread1491640.html
C++ Как использовать DAO без MFC (дайте простенький примерчик)
Всем здрасьте. У меня Win XP без офиса ( т.е. MS Office никогда не было), короче голый windows и без FrameWork, но dll-ка DAO, я смотрю, есть. Буду использовать VS 2010 Пожалуйста помогите с примерчиком и литературу для порлного счастья. Спасибо
C++ Сортировка выбором по возрастанию
Провести сортировку элементов массива больших числа С по возрастанию методов сортировки с выбором. Элементы удовлетворяющие условию должны оказаться вначале массива. Ввод числа С организовать с клавиатуры. Сортировку массива оформить ввиде функции. #include <cstdlib> #include <iostream> #include <fstream> using namespace std; double sort(double *mass, int n, int c) { ...
C++ Сформировать массив расположив элементы на главной диагонали http://www.cyberforum.ru/cpp-beginners/thread1491624.html
Задан массив А(50)(50). Сформировать из него массив BB(50)(50), расположив элементы массива АА на главной диагонали. Значения остальных элементов массива ВВ обнулить
C++ Написать код программы для реализации класса human Написать код программы для реализации класса human с атрибутами класса имя и возраст и методами задания имени и возраста и вывода информации об объекте этого класса. подробнее

Показать сообщение отдельно
hoggy
5225 / 2116 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
03.07.2015, 00:48     Что такое конструктор?
Цитата Сообщение от 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, либо её аналогами для других платформ
    // теоретически может отработать не верно
}
 
Текущее время: 16:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru