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

Что делает конструктор? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Библиотеки для книги Страуструпа http://www.cyberforum.ru/cpp-beginners/thread944613.html
Доброго времени суток! Дядя Бьярне использует библиотеки в своей книге "Принципы и практика использования С++", которых нет в компиляторах. Причем при добавлении их в папку include их дальнейшее...
C++ Системы счисления Помогите дописать функцию перевода дробной части числа. Заранее благодарен. Код программы: #include <iostream> #include <conio.h> #include <locale.h> char int_symbol(int num){ char... http://www.cyberforum.ru/cpp-beginners/thread944605.html
C++ "Жизнь" на C++
Решил написать консольную версию популярной игры "Жизнь"(http://ru.wikipedia.org/wiki/%D0%96%D0%B8%D0%B7%D0%BD%D1%8C_(%D0%B8%D0%B3%D1%80%D0%B0)) field.h: class field{ // игровое поле....
Запрет ввода букв C++
Вчера пробовал написать калькулятор. Но в нем можно вводить и буквы и цифры. Что надо допасать в коде чтобы буквы не вводились на экран? А вводились только цифры. При вводе букв получаеться вот...
C++ Ошибка: Multiples types in one declaration http://www.cyberforum.ru/cpp-beginners/thread944534.html
Как исправить ошибку которая ниже на скрине? И заработает ли этот код?( проба создать связной список) #include <iostream> using namespace std; class part { public: ...
C++ Как вшить библиотеку MSVCP100.dll в программу? Добрый день. Написал программу и у меня она работает на отлично, однако у знакомых она требует библиотеку MSVCP100.dll. Вариант скачать ее просто так не устраивает, ибо каждому, кто будет... подробнее

Показать сообщение отдельно
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
02.09.2013, 13:24
Dimka-novitsek, вот смотри, делаем класс хуман, человек по нашему:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
#include <string>
using std::string;
 
class chelovek
{
public:
string imya;
int vozrast;
int ves;
int rost;
string made_in;
/* данные класса специально открытые (public) что бы не писать 
функции get и set, что бы не тратить просто так время */
};
 
int main()
{
chelovek first;
 
first.imya = "Vasek";
first.vozrast = 20;
first.rost = 170;
first.ves = 120;
first.made_in = "china";
 
system("pause");
return 0;
}



строчка 20 мы создаем объект класса (объект first, класс chelovek), потом в строчка 22, 23, 24, 25, 26, мы задаем ему параметры. 6 строчек, а представь что у тебя 1000 человек (объектов).

Было бы не плохо, если бы все это можно было объединить всего в одну строчку, в более простой форме, для этого существует конструктор (в том числе для этого), теперь смотри:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
#include <string>
using std::string;
 
class chelovek
{
public:
string imya;
int vozrast;
int ves;
int rost;
string made_in;
/* данные класса специально открытые (public) что бы не писать 
функции get и set, что бы не тратить просто так время */
 
chelovek() { imya = "Unnammed"; vozrast = 0; ves = 0; rost = 0; made_in  = "Mars"; }
chelovek(string N, int VZ, int VS, int R, string M) 
{ imya = N; vozrast = VZ; ves = VS; rost = R; made_in  = M; }
};
 
int main()
{
chelovek first("Vasek", 20, 170, 120, "china" );
 
system("pause");
return 0;
}


лучше стало? проще?

Сам конструктор по мимо работы с переменными класса может работать и с другими вещами, например вызывать посторонние функции:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
#include <string>
using std::string;
 
void fun()
{ std::cout << "Message in fun()!\n"; }
/* выше класса, потому что переменная или функция 
должно быть созданы (объявлены) до того, как они будут использоваться */
 
class chelovek
{
public:
string imya;
int vozrast;
int ves;
int rost;
string made_in;
/* данные класса специально открытые (public) что бы не писать 
функции get и set, что бы не тратить просто так время */
 
chelovek() { imya = "Unnammed"; vozrast = 0; ves = 0; rost = 0; made_in  = "Mars"; fun(); }
chelovek(string N, int VZ, int VS, int R, string M) 
{ imya = N; vozrast = VZ; ves = VS; rost = R; made_in  = M; fun(); }
};
 
 
int main()
{
chelovek first("Vasek", 20, 170, 120, "china" );
 
system("pause");
return 0;
}


Моя тебе рекомендация, всегда в классе создавай конструктор по умолчанию (т.е. без параметров) и конструктор с параметрами, я не буду расписывать почему, это на полстраницы текста, когда дойдешь до наследования, STL тогда поймешь.

Добавлено через 14 минут
Деструктор используется для удаления (разрушения объекта), после того как он стал не нужен, если у тебя в классе простые (статичные) переменные:

C++
1
2
3
4
5
6
class MyClass
{
int x;
int y;
int z;
};
то деструктор по большому счету не нужен, но если у тебя в классе используются динамические переменные (не помню как точно называется, это во всем наркотики виноваты) под которые выделяется память, то деструктор нужен (необходим) т.к. если его не будет, будет происходить утечка памяти.

если ты не сталкивался с динамическими переменными, т.е. не встречал такие слова как new, delete, тогда можешь пока что не напрягаться.
Если хочешь проверить как происходит утечка памяти, воспользуйся этой программой:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
void fun()
{
double *test = new double[9999];
}
 
int main()
{
 
for (int i = 0; i < 9999; i++)
{ fun(); }
 
system("pause");
return 0;
}


скомпилируй, запусти диспетчер задач и запусти программу, посмотри как будет улетать твоя оперативная память.

а потом добавь всего одну строчку в эту программу, в функцию fun() и посмотри как уже улетать ни чего не будет:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void fun()
{
double *test = new double[9999];
delete[] test;
}
 
int main()
{
 
for (int i = 0; i < 9999; i++)
{ fun(); }
 
system("pause");
return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru