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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 19:59     Конструкторы и деструкторы #1
Прочитал про конструкторы и деструкторы. Пишут что они нужны для инициализации переменных класса. Как они используются я понял, но не понял зачем это нужно. Вместо конструктора можно ведь придумать любую другую функцию и она тоже самое будет делать?
Между строк 59 и 63 я не вижу деструктора.
В строке 8 создаётся конструктор, в строках 18-20 происходит определение конструктора, в строке 58 применяется данный конструктор. Эти строки ведь можно заменить любой другой функцией?

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

C++ Конструкторы/Деструкторы
C++ Конструкторы и деструкторы
C++ Классы. Конструкторы. Деструкторы
C++ Конструкторы и деструкторы
Конструкторы и деструкторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 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.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 20:10     Конструкторы и деструкторы #4
А ты до сих пор не понял, что КОНСТРУКТОР (именно он) выделяет память под объект!!!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 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.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 20:18     Конструкторы и деструкторы #8
Я думаю, конструктор лучше работает с оперативной памятью, чем ты (со своей функцией)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 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();}
koderman
2 / 2 / 1
Регистрация: 27.11.2012
Сообщений: 131
07.12.2012, 20:25  [ТС]     Конструкторы и деструкторы #10
Тут вставится стандартный конструктор и скомпилируется.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 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
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
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.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 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.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
07.12.2012, 20:36     Конструкторы и деструкторы #16
Короче говоря, СКОМПИЛИРУЙ И УБЕДИСЬ, что из main нет доступа к конструктору PRIVATE. Знаешь почему??? - Потому что он не PUBLIC а PRIVATE.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
07.12.2012, 20:37     Конструкторы и деструкторы #17
Цитата Сообщение от sovaz1997 Посмотреть сообщение
В классе противоречнгсть: конструктор находится в запрещенном режиме-
в данной интерпретации да
но так делают если нельзя создавать объект статически
тогда переопределяют new в public блоке который и вызовет конструктор
в результате
C++
1
A obj;
нельзя
а
C++
1
A *obj=new A;
можно
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 20:37     Конструкторы и деструкторы #18

Не по теме:

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


Инициализация, присваивание и уничтожение класса
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 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++
C++ Закрыты конструкторы и деструкторы!
Конструкторы и деструкторы C++

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

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

Текущее время: 00:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru