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

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

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

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

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

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

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

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

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

Списки, конструкторы, деструкторы - C++
Извините, что я тут расфлудился темами... Это последняя в этом месяце, честно. Суть проблемы в том, что я вот работал с QList из Qt и...

Пустые конструкторы и деструкторы - C++
Скажите, есть-ли смысл прописывать пустые конструкторы и деструкторы? C_MainClass() {} ~C_MainClass() {}

Классы. Конструкторы. Деструкторы - C++
В Массиве рядок, который имеет минимальный елемент, отсортванть методом вставок с помощью классов. Текст программы я зделал трьома...

Наследуются ли конструкторы и деструкторы? - C++
При наследовании происходит ли наследование конструкторов и деструкторов базового класса?

Конструкторы/Деструкторы. Дружественные функции - C++
Здраствуйте! Учусь на 1 курсе физфака МГУ им. Ломоносова. Начали изучать С++. Вот есть задача, точнее д.з. Можете мне помочь, пожалуйста....

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

Не по теме:

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



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

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

Не по теме:

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


Инициализация, присваивание и уничтожение класса
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 20:40     Конструкторы и деструкторы
Еще ссылки по теме:

Конструкторы, Деструкторы. вывод на экран - C++
Здравствуйте уважаемые форумчане! Из книги взял пример кода по конструкторам. Вот код: #include &lt;cstdlib&gt; #include &lt;iostream&gt; ...

Конструкторы и деструкторы функционального объекта - C++
Привет всем. Вообщем разбирал задачу, в которой рассматривается алгоритм for_each, я решил добавить отладочный вывод в конструктор и...

Конструкторы и Деструкторы в С++. Не могу разобраться( - C++
Помогите пожалуйста разобраться с конструкторами и деструкторами в с++. Не пойму , как ними пользоваться . Вот , например у меня есть код :...

Ошибка в нескольких строчках. Конструкторы и деструкторы - C++
Какие ошибки в фрагменте кода? Что нужно вычеркнуть? class X { int i; double t; x() { i=0; t=1.0; cout&lt;&lt;1; } public:

Конструкторы/деструкторы. Помогите прокомментировать код - C++
massiv massiv::sum(massiv mas1){ int f=0,j,h=0; massiv mas3(mas1.n+this-&gt;n); // for(int i=0;i&lt;mas1.n;i++) mas3.mas=mas1.mas;...


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,654
07.12.2012, 20:40     Конструкторы и деструкторы #20
Цитата Сообщение от koderman Посмотреть сообщение
В примере из книги какраз из main создаётся объект.
в книге у тебя конструктор public
а уCroessmah, private
Yandex
Объявления
07.12.2012, 20:40     Конструкторы и деструкторы
Ответ Создать тему
Опции темы

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