Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
1

Конструкторы и деструкторы

07.12.2012, 19:59. Показов 3796. Ответов 40
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прочитал про конструкторы и деструкторы. Пишут что они нужны для инициализации переменных класса. Как они используются я понял, но не понял зачем это нужно. Вместо конструктора можно ведь придумать любую другую функцию и она тоже самое будет делать?
Между строк 59 и 63 я не вижу деструктора.
В строке 8 создаётся конструктор, в строках 18-20 происходит определение конструктора, в строке 58 применяется данный конструктор. Эти строки ведь можно заменить любой другой функцией?

Извиняюсь. Конструкторы служат для создания и инициализации ОБЪЕКТОВ класса.
Миниатюры
Конструкторы и деструкторы   Конструкторы и деструкторы  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2012, 19:59
Ответы с готовыми решениями:

Конструкторы и деструкторы
Привет. Есть структура, содержащая 7 полей, в которые я ввожу значения с клавиатуры. Нужно...

Конструкторы и деструкторы
Создать класс LongLong для работы с целыми числами из 64 бит. Число должно быть представлено двумя...

Конструкторы и деструкторы
Не понимаю, как закончить программу. Написала конструктор и деструктор, хотя он тут и не нужен по...

Конструкторы и деструкторы
Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны...

40
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
07.12.2012, 20:03 2
Конструктор - это член класса, который используется для создания объектов класса. Конструктор имеет такое же название как и класс, но не имеет возвращаемого значения. Конструктор вызывается в месте выполнения оператора new.
0
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:08  [ТС] 3
Точно это же я и прочитал в книге))
Какой ещё конструктор. Объект я создам например так без всякого конструктора.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class soldier
{
public:
  int x,y;
  int ammo;
};
 
 int main
 
{
 
soldier OBJEKT;
 
};
OBJEKT это объект, и никакого конструктора я не делал перед созданием объекта.
0
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
07.12.2012, 20:10 4
А ты до сих пор не понял, что КОНСТРУКТОР (именно он) выделяет память под объект!!!
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.12.2012, 20:12 5

Не по теме:

Цитата Сообщение от sovaz1997 Посмотреть сообщение
А ты до сих пор не понял, что КОНСТРУКТОР (именно он) выделяет память под объект!!!
Да ладно?:swoon:



Цитата Сообщение от koderman Посмотреть сообщение
Объект я создам например так без всякого конструктора.
У Вас есть конструктор по умолчанию.
0
26 / 21 / 2
Регистрация: 14.07.2012
Сообщений: 176
07.12.2012, 20:16 6
Конструктор в любом случае генерируется, в твоём случае - конструктор без аргументов по умолчанию. Однако можно создать и свой:
C++
1
2
3
4
5
6
7
8
9
10
class MyClass
{
private:
         int a, b, c;
public:
         MyClass ()
         {
                cout << "Объект инициализирован";
         }
};
0
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:16  [ТС] 7
Цитата Сообщение от Croessmah;
У Вас есть конструктор по умолчанию.

Ага, про это тоже читал. Написано что если не пишется конструктор и деструктор, то используются стандартные. Непонятно только зачем они применяются в коде. Использовались бы и дальше по умолчанию. Зачем прописывать их и использовать в качестве неполноценной функции в коде которая не возвращает значение?
0
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
07.12.2012, 20:18 8
Я думаю, конструктор лучше работает с оперативной памятью, чем ты (со своей функцией)
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.12.2012, 20:21 9

Не по теме:

Цитата Сообщение от sovaz1997 Посмотреть сообщение
Я думаю, конструктор лучше работает с оперативной памятью, чем ты (со своей функцией)
Скажите это программистам Си, которые только так и работали, да и чем по сути конструктор отличается от обычной функции? Ну кроме, как вызывается автоматом при создании объекта?


Цитата Сообщение от koderman Посмотреть сообщение
Использовались бы и дальше по умолчанию. Зачем использовать их в качестве неполноценной функции в коде которая не возвращает значение?
Попробуйте скомпилировать
C++
1
2
3
4
5
6
7
8
9
class A{
private:
    int x;
    A();
};
int main(){
    A obj;
    return 0;
}
А Вы уверены, что Вы всегда будете помнить о том, что нужно вызвать функцию-конструктор/деструктор для объекта? Да и к тому же намного удобнее писать
C++
1
2
3
4
5
6
{string str;//работаем с объектом}
//а не
{string str;
str.Initialize();
//работаем с объектом
str.Terminate();}
0
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:25  [ТС] 10
Тут вставится стандартный конструктор и скомпилируется.
0
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
07.12.2012, 20:27 11
Цитата Сообщение от koderman Посмотреть сообщение
Тут вставится стандартный конструктор и скомпилируется.
Да, скомпилируется...................................

Итого:
<errors id="codeblocks)))"
\Sources\test.cpp||In function 'int main()':|
\Sources\test.cpp|4|error: 'A::A()' is private|
\Sources\test.cpp|7|error: within this context|
||=== Build finished: 2 errors, 0 warnings ===|
</errors>
0
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:28  [ТС] 12
А как же информация о стандартных конструкторах?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
07.12.2012, 20:30 13
Цитата Сообщение от koderman Посмотреть сообщение
Непонятно только зачем они применяются в коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class AA
{
int size;
int *memory;
public::
AA(int n)
{ size=n;
 memory=new int[size];
 };
~AA()
  {
   delete []memory;
};
}
 
 
 
AA  b(5);
AA  c(10);
как ты заменишь создание двух объектов простыми функциями
а это еще не самый сложный класс
Цитата Сообщение от koderman Посмотреть сообщение
Зачем использовать их в качестве неполноценной функции в коде которая не возвращает значение?
конструктор это не функция это конструктор, он не возвращает значения, его нельзя вызвать явно, он неразрывно связан с классом
есть еще такие конструкторы копирования
пойми что к конструктору нельзя относится как к функции, хотя он и похож на неё

Добавлено через 1 минуту
Цитата Сообщение от koderman Посмотреть сообщение
А как же информация о стандартных конструкторах?
нет таких
есть конструктор по умолчанию
0
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
07.12.2012, 20:30 14
Если переопределить конструктор, то должен использоваться он. В классе противоречнгсть: конструктор находится в запрещенном режиме->нельзя создать объект из main()->ошибки программы. Все ясно? Нет?->проверь)))
0
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:34  [ТС] 15
Нельзя создать Объект из main???
В примере из книги какраз из main создаётся объект.
ошибка в книге?
0
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
07.12.2012, 20:36 16
Короче говоря, СКОМПИЛИРУЙ И УБЕДИСЬ, что из main нет доступа к конструктору PRIVATE. Знаешь почему??? - Потому что он не PUBLIC а PRIVATE.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
07.12.2012, 20:37 17
Цитата Сообщение от sovaz1997 Посмотреть сообщение
В классе противоречнгсть: конструктор находится в запрещенном режиме-
в данной интерпретации да
но так делают если нельзя создавать объект статически
тогда переопределяют new в public блоке который и вызовет конструктор
в результате
C++
1
A obj;
нельзя
а
C++
1
A *obj=new A;
можно
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
07.12.2012, 20:37 18

Не по теме:

Цитата Сообщение от koderman Посмотреть сообщение
Нельзя создать Объект из main???
В примере из книги какраз из main создаётся объект.
Вы просто не внимательно на код смотрели :) в книге по другому


Инициализация, присваивание и уничтожение класса
0
CEO SOVAZ Corp.
386 / 232 / 51
Регистрация: 17.12.2011
Сообщений: 822
Записей в блоге: 1
07.12.2012, 20:38 19
C++
1
2
3
4
5
6
7
8
9
class A{
private:
    int x;
    A();//конструктор лежит в private
};
int main(){
    A obj;
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
class A{
public:
    int x;
    A();//конструктор лежит в public
};
int main(){
    A obj;
    return 0;
}
Добавлено через 1 минуту
Сравните строчки 2.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
07.12.2012, 20:40 20
Цитата Сообщение от koderman Посмотреть сообщение
В примере из книги какраз из main создаётся объект.
в книге у тебя конструктор public
а уCroessmah, private
0
07.12.2012, 20:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2012, 20:40
Помогаю со студенческими работами здесь

Конструкторы и деструкторы
Помогите, пожалуйста, исправить программу и закончить ее как надо. Необходимо реализовать класс...

Конструкторы и деструкторы
Помогите исправить программу. Необходимо реализовать класс с двумя полями, имеющими имена first...

Конструкторы и деструкторы
Код: #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; class complex { private:...

Конструкторы и деструкторы
Напишите простейшие примеры объявления и определения конструкторов и деструкторов. Желательно,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru