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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
#1

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

27.08.2013, 23:23. Просмотров 3255. Ответов 77
Метки нет (Все метки)

Я очень плохо понял вобще. Он вроде помогает создать в памяти место для переменных обьявленых в классе??
В каких слуаях его лучше создавать и использовать?Его лучше иметь для каждого класса?

Где его при этом лучше писать- перед классом, позже или внутри?
Почему его-конструктор- можно писать с параметрами и без параметров?
Какие имено такие параметры и зачем конструктор в себя принимает?

Был ли автоматически создан стандартный конструктор при создани класса или обьекта?
Почему компилятор ругается на создание какого-то деструктора?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class  miclasse
 
 { 
   static const int AA=66;
   int RR;
        public :
   int FF;
   char Simvols[104];
   int Funclasse(int brumm);
 }; 
 
int miclasse::Funclasse(int brumm)
{ 
  brumm=FF+ brumm; cout  <<  " brumm "  << brumm  <<  endl; return 0;  } 
miclasse ::~Funclasse(){} // деструктор
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 23:23     Что делает конструктор?
Посмотрите здесь:

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

Что делает printf? - C++
Народ! Я уже прочитал много страниц и так ни черта не понял про printf. Прошу, объясните мне что он делает, и что печатает (судя по моим...

_splitpath что делает? - C++
Что такое, с чем его едят, когда применяется и о параметрах.

Что делает tellg? - C++
имеем вот такой кодstring str; ifstream in(FileName ); ifstream::streampos filesize = in.tellg(); str.reserve(filesize); почему...

Что делает строка? - C++
Что делает 14 строка? P.S. Программа читает пары с файла и выводит их на экран. # include &lt;iostream&gt; # include &lt;string&gt; # include...

Что делает программа? - C++
не могу понять что делает программа? #include &lt;iostream&gt; using namespace std; bool mystery(unsigned bits); int main() { ...

Что делает pair? - C++
Можно пример посложнее(с map или ещё чем) с объяснениями?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
28.08.2013, 22:00     Что делает конструктор? #46
Цитата Сообщение от zer0mail Посмотреть сообщение
VLK, подай в суд, типа "мне эта книга мозги вывихнула и не предупредила об опасности"
если бы я жил в нормальной стране, я бы это сделал, тут к сожалению, засмеют, заклюют что в принципе показывает данная тема.
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
28.08.2013, 22:02     Что делает конструктор? #47
VLK, имхо Ваши таланты в области юриспруденции, а не С++
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
28.08.2013, 22:03  [ТС]     Что делает конструктор? #48
Расчитывать нужо все же на бальшинство людей, а ни отдельных баранов, иначе это тоже маразм.
Ну, дети-это вобще отдельно.

А вот, пример с сайта. Что это за звёздочка? как она работает?
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
class employee 
 
 { 
 public: 
    employee(char *, long, float); //Конструктор 
    void show_employee(void); 
    int change_salary(float); 
    long get_id(void); 
 
 
employee::employee(char *name, long employee_id, float salary) 
 
 { 
    strcpy(employee::name, name) ; 
    employee::employee_id = employee_id; 
    if (salary < 50000.0) 
    employee::salary = salary; 
    else  // Недопустимый оклад 
    employee::salary = 0.0; 
 }
 
 private: 
    char name [64]; 
    long employee_id; 
    float salary; 
 };
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
28.08.2013, 22:04     Что делает конструктор? #49
Цитата Сообщение от zer0mail Посмотреть сообщение
VLK, имхо Ваши таланты в области юриспруденции, а не С++
как бы это странно не звучало, но до того как я начал изучать С++, я как раз занимался юриспруденцией (работал в этой сфере)

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Ну, дети-это вобще отдельно.
Дети отдельно, а вот подход везде единый.
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
28.08.2013, 22:04     Что делает конструктор? #50
Dimka-novitsek, до сих пор не курсе, что "звездочка" - это указатель?
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
28.08.2013, 22:14  [ТС]     Что делает конструктор? #51
Не дочитал еще, правда.

Добавлено через 7 минут
Там напуталось в кодах, ридактировать не могу. У меня страницу порядком глючило.
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
28.08.2013, 22:17  [ТС]     Что делает конструктор? #52
Вот.
Миниатюры
Что делает конструктор?  
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
31.08.2013, 23:10  [ТС]     Что делает конструктор? #53
Особое спасибо Evg!! Очень в целом понятный текст. Правда что я примеры разбираю кое-как. Яведь пока ни си, ни си с плюсами почти никак.

Пожалуста,также если кому-то не в лом, распишите пример, включая звездочку, которая указатель. Как будет работать код, если на переменную наме не указывать, а вписать ее без звездочки? Если в лом, то не надо.

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
class employee 
 
 { 
 public: 
    employee(char *, long, float); //Конструктор 
    void show_employee(void); 
    int change_salary(float); 
    long get_id(void); 
 private: 
    char name [64]; 
    long employee_id; 
    float salary; 
 }; 
 
 
 employee::employee(char *name, long employee_id, float salary) 
 
 { 
    strcpy(employee::name, name) ; 
    employee::employee_id = employee_id; 
    if (salary < 50000.0) 
    employee::salary = salary; 
    else  // Недопустимый оклад 
    employee::salary = 0.0; 
 }
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
31.08.2013, 23:23     Что делает конструктор? #54
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
class employee 
 
 { 
 public: 
    employee(char [], long, float); //Конструктор 
    void show_employee(void); 
    int change_salary(float); 
    long get_id(void); 
 private: 
    char name [64]; 
    long employee_id; 
    float salary; 
 }; 
 
 
 employee::employee(char name[], long employee_id, float salary) 
 
 { 
    strcpy(employee::name, name) ; 
    employee::employee_id = employee_id; 
    if (salary < 50000.0) 
    employee::salary = salary; 
    else  // Недопустимый оклад 
    employee::salary = 0.0; 
 }
Если я правильно тебя понял
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
01.09.2013, 13:19  [ТС]     Что делает конструктор? #55
А, вот как! Спасибо!!

Добавлено через 3 часа 37 минут
Что не нравится компилятору? Ему непонравлось, тогда я дописал строку ставшую тринадцатой employee(char *, long, float); и всё равно не нравитя, вот

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include<iostream>
using namespace std;
#include <string.h> 
 
 class employee 
 
 { 
 public: 
    char name [64]; 
    long employee_id; 
    float salary; 
    void show_employee(void)
    employee(char *, long, float);
 
    { 
       cout << "Имя:  " << name << endl; 
       cout << "Номер служащего: "  << employee_id << endl; 
       cout << "Оклад:  " << salary << endl; 
    }; 
 }; 
 
 employee::employee(char *name, long employee_id,  float salary) 
 
 { 
    strcpy(employee::name, name) ; 
    employee::employee_id = employee_id; 
    if (salary < 50000.0) 
       employee::salary = salary; 
    else  // Недопустимый оклад 
       employee::salary = 0.0; 
 }
 
 void main(void) 
 
 { 
    employee worker, boss; 
    strcpy(worker.name, "John Doe"); 
    worker.employee_id = 12345; 
    worker.salary = 25000; 
    strcpy(boss.name, "Happy Jamsa"); 
    boss.employee_id = 101; 
    boss.salary = 101101.00; 
    worker.show_employee(); 
    boss.show_employee();
    system("pause");
 
 }#include<iostream>
using namespace std;
#include <string.h> 
 
 class employee 
 
 { 
 public: 
    char name [64]; 
    long employee_id; 
    float salary; 
    void show_employee(void)
    employee(char *, long, float);
 
    { 
       cout << "Имя:  " << name << endl; 
       cout << "Номер служащего: "  << employee_id << endl; 
       cout << "Оклад:  " << salary << endl; 
    }; 
 }; 
 
 employee::employee(char *name, long employee_id,  float salary) 
 
 { 
    strcpy(employee::name, name) ; 
    employee::employee_id = employee_id; 
    if (salary < 50000.0) 
       employee::salary = salary; 
    else  // Недопустимый оклад 
       employee::salary = 0.0; 
 }
 
 void main(void) 
 
 { 
    employee worker, boss; 
    strcpy(worker.name, "John Doe"); 
    worker.employee_id = 12345; 
    worker.salary = 25000; 
    strcpy(boss.name, "Happy Jamsa"); 
    boss.employee_id = 101; 
    boss.salary = 101101.00; 
    worker.show_employee(); 
    boss.show_employee();
    system("pause");
 
 }
1>d:\проги\reshenie\employee\employee.cpp(13): error C3646: employee: неизвестный спецификатор переопределения
1>d:\проги\reshenie\employee\employee.cpp(13): error C2091: функция возвращает функцию
1>d:\проги\reshenie\employee\employee.cpp(15): error C2059: синтаксическая ошибка: {
1>d:\проги\reshenie\employee\employee.cpp(15): error C2334: непредвиденные лексемы перед "{"; пропуск вероятного тела функции
1>d:\проги\reshenie\employee\employee.cpp(24): error C2511: employee::employee(char *,long,float): перегруженная функция-член не найдена в "employee"
1> d:\проги\reshenie\employee\employee.cpp(7): см. объявление "employee"
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
01.09.2013, 13:20     Что делает конструктор? #56
точка с запятой в 12
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
01.09.2013, 13:27  [ТС]     Что делает конструктор? #57
Спасибо!!!!!!

Добавлено через 1 минуту
Не придставляю, как она могла отуда деться... Я ведь компилировал ранее, без 13 и 22-31!
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
01.09.2013, 13:36  [ТС]     Что делает конструктор? #58
1>d:\проги\reshenie\employee\employee.cpp(15): error C2059: синтаксическая ошибка: {
1>d:\проги\reshenie\employee\employee.cpp(15): error C2334: непредвиденные лексемы перед "{"; пропуск вероятного тела функции
1>d:\проги\reshenie\employee\employee.cpp(36): error C2512: employee: нет подходящего конструктора по умолчанию
1>d:\проги\reshenie\employee\employee.cpp(36): error C2512: employee: нет подходящего конструктора по умолчанию

Добавлено через 3 минуты
Я видно плохо понял правила написания и работы с конструктором.

Добавлено через 1 минуту
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
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<iostream>
using namespace std;
#include <string.h> 
 
 class employee 
 
 { 
 public: 
    char name [64]; 
    long employee_id; 
    float salary; 
    void show_employee(void) ;
    employee(char *, long, float);
 
    { 
       cout << "Имя:  " << name << endl; 
       cout << "Номер служащего: "  << employee_id << endl; 
       cout << "Оклад:  " << salary << endl; 
    }; 
 }; 
 
 employee::employee(char *name, long employee_id,  float salary) 
 
 { 
    strcpy(employee::name, name) ; 
    employee::employee_id = employee_id; 
    if (salary < 50000.0) 
       employee::salary = salary; 
    else  // Недопустимый оклад 
       employee::salary = 0.0; 
 }
 
 void main(void) 
 
 { 
    employee worker, boss; 
    strcpy(worker.name, "John Doe"); 
    worker.employee_id = 12345; 
    worker.salary = 25000; 
    strcpy(boss.name, "Happy Jamsa"); 
    boss.employee_id = 101; 
    boss.salary = 101101.00; 
    worker.show_employee(); 
    boss.show_employee();
    system("pause");
 
 }
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
01.09.2013, 13:41     Что делает конструктор? #59
Лишняя точка с запятой в 13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2013, 13:43     Что делает конструктор?
Еще ссылки по теме:

Что делает операция >>? - C++
что значит знак &quot;&gt;&gt;&quot;? Например: d = zt &gt;&gt; 15

Что делает endl - C++
Код типа cout &lt;&lt; &quot;blahblahblah&quot; &lt;&lt; endl зачем там endl, вроде и без него все нормально работает

Что делает оператор >> в C++? - C++
кто-нибудь может объяснить что конкретно делает оператор &gt;&gt; в C++. есть один пример. Там используется api-функция GetLogicalDrives. ...

Что делает operator++ - C++
Что делает operator++? Где и как он используется?

Что делает код? - C++
цитата из переведённой книги Александреску по языку D: &quot;Если кто-то из ваших коллег прокачал самоуверенность до уровня Супермена, ...


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

Или воспользуйтесь поиском по форуму:
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
01.09.2013, 13:43     Что делает конструктор? #60
Dimka-novitsek, вы читаете сообщения компилятора или воспринимаете их как "набор буковок"?

15 когда копилятор сообщает об ошибке "в строке N", надо смотреть как минимум и предыдущую строку.
36 конструктор по умолчанию - это функция <имя класса>(), т.е. здесь employee(), а такой функции нет.
Yandex
Объявления
01.09.2013, 13:43     Что делает конструктор?
Ответ Создать тему
Опции темы

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