Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
koderman
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
1

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

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

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

Извиняюсь. Конструкторы служат для создания и инициализации ОБЪЕКТОВ класса.
0
Миниатюры
Конструкторы и деструкторы   Конструкторы и деструкторы  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 19:59
Ответы с готовыми решениями:

Конструкторы/Деструкторы
Доброго времени суток! Есть проблемка... после выполнении программа вылетает...

Конструкторы и деструкторы
Код: #include <iostream> #include <stdlib.h> #include <conio.h> class ...

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

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

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

40
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:03 2
Конструктор - это член класса, который используется для создания объектов класса. Конструктор имеет такое же название как и класс, но не имеет возвращаемого значения. Конструктор вызывается в месте выполнения оператора new.
0
koderman
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
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:10 4
А ты до сих пор не понял, что КОНСТРУКТОР (именно он) выделяет память под объект!!!
0
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 20:12 5

Не по теме:

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



Цитата Сообщение от koderman Посмотреть сообщение
Объект я создам например так без всякого конструктора.
У Вас есть конструктор по умолчанию.
0
PreFX
25 / 20 / 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
koderman
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:16  [ТС] 7
Цитата Сообщение от Croessmah;
У Вас есть конструктор по умолчанию.

Ага, про это тоже читал. Написано что если не пишется конструктор и деструктор, то используются стандартные. Непонятно только зачем они применяются в коде. Использовались бы и дальше по умолчанию. Зачем прописывать их и использовать в качестве неполноценной функции в коде которая не возвращает значение?
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:18 8
Я думаю, конструктор лучше работает с оперативной памятью, чем ты (со своей функцией)
0
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 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
koderman
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:25  [ТС] 10
Тут вставится стандартный конструктор и скомпилируется.
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 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
koderman
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:28  [ТС] 12
А как же информация о стандартных конструкторах?
0
ValeryS
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,718
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
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:30 14
Если переопределить конструктор, то должен использоваться он. В классе противоречнгсть: конструктор находится в запрещенном режиме->нельзя создать объект из main()->ошибки программы. Все ясно? Нет?->проверь)))
0
koderman
2 / 2 / 0
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:34  [ТС] 15
Нельзя создать Объект из main???
В примере из книги какраз из main создаётся объект.
ошибка в книге?
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:36 16
Короче говоря, СКОМПИЛИРУЙ И УБЕДИСЬ, что из main нет доступа к конструктору PRIVATE. Знаешь почему??? - Потому что он не PUBLIC а PRIVATE.
0
ValeryS
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,718
07.12.2012, 20:37 17
Цитата Сообщение от sovaz1997 Посмотреть сообщение
В классе противоречнгсть: конструктор находится в запрещенном режиме-
в данной интерпретации да
но так делают если нельзя создавать объект статически
тогда переопределяют new в public блоке который и вызовет конструктор
в результате
C++
1
A obj;
нельзя
а
C++
1
A *obj=new A;
можно
0
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 20:37 18

Не по теме:

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


Инициализация, присваивание и уничтожение класса
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 51
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 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
ValeryS
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,718
07.12.2012, 20:40 20
Цитата Сообщение от koderman Посмотреть сообщение
В примере из книги какраз из main создаётся объект.
в книге у тебя конструктор public
а уCroessmah, private
0
07.12.2012, 20:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 20:40

Конструкторы и деструкторы
Здравствуйте уважаемые программисты, помогите пожалуйста новичку? Не могу...

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

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


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

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

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