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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
#1

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

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

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

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

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

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

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

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

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

Конструкторы/Деструкторы - C++
Доброго времени суток! Есть проблемка... после выполнении программа вылетает (без ошибок, просто выбивает в Windows программирую на BC...

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

Не по теме:

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



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

Ага, про это тоже читал. Написано что если не пишется конструктор и деструктор, то используются стандартные. Непонятно только зачем они применяются в коде. Использовались бы и дальше по умолчанию. Зачем прописывать их и использовать в качестве неполноценной функции в коде которая не возвращает значение?
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:18 #8
Я думаю, конструктор лучше работает с оперативной памятью, чем ты (со своей функцией)
0
Croessmah
Эксперт CЭксперт С++
13221 / 7493 / 845
Регистрация: 27.09.2012
Сообщений: 18,412
Записей в блоге: 3
Завершенные тесты: 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 / 1
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:25  [ТС] #10
Тут вставится стандартный конструктор и скомпилируется.
0
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 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 / 1
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:28  [ТС] #12
А как же информация о стандартных конструкторах?
0
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
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 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
07.12.2012, 20:30 #14
Если переопределить конструктор, то должен использоваться он. В классе противоречнгсть: конструктор находится в запрещенном режиме->нельзя создать объект из main()->ошибки программы. Все ясно? Нет?->проверь)))
0
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:34  [ТС] #15
Нельзя создать Объект из main???
В примере из книги какраз из main создаётся объект.
ошибка в книге?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 20:34
Привет! Вот еще темы с ответами:

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

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

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

Конструкторы и деструкторы - C++
#include &lt;iostream&gt; #include &lt;Windows.h&gt; class Try { public: void* px; Try() { printf(&quot;Try\n&quot;); px=malloc(12); }; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.12.2012, 20:34
Ответ Создать тему
Опции темы

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