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

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

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

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

27.08.2013, 23:23. Просмотров 3436. Ответов 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(){} // деструктор
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 23:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что делает конструктор? (C++):

Что в программе делает так, что процессор грузится на 100%? - C++
Я не очень разбираюсь в С++, поэтому прошу вашей подсказки по поводу нагрузки на процессор. Вот код программы, на компьютере жрет всю...

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d &gt;&gt; c; cout&lt;&lt; f; вывод 0

Что это за метод?И что он делает? - C++
double func (double y, int k, int n){ double y1; for (int i=0; i&lt;=n+1;i++) y1=0; double t; t=0; y1=1; ...

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

Объясните что именно делает "x%d, y%d: " или что это в даном коде - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double rast(double x1, double y1, double x2, double y2) // Функція яка...

Что делает программа - C++
Объясните пожалуйста пошагово что делает эта программа #include &lt;stdio.h&gt; #include &lt;fstream&gt; #include &lt;iostream&gt; using...

77
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
28.08.2013, 22:00 #46
Цитата Сообщение от zer0mail Посмотреть сообщение
VLK, подай в суд, типа "мне эта книга мозги вывихнула и не предупредила об опасности"
если бы я жил в нормальной стране, я бы это сделал, тут к сожалению, засмеют, заклюют что в принципе показывает данная тема.
0
zer0mail
2374 / 2004 / 199
Регистрация: 03.07.2012
Сообщений: 7,196
Записей в блоге: 1
28.08.2013, 22:02 #47
VLK, имхо Ваши таланты в области юриспруденции, а не С++
0
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; 
 };
0
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
28.08.2013, 22:04 #49
Цитата Сообщение от zer0mail Посмотреть сообщение
VLK, имхо Ваши таланты в области юриспруденции, а не С++
как бы это странно не звучало, но до того как я начал изучать С++, я как раз занимался юриспруденцией (работал в этой сфере)

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

Добавлено через 7 минут
Там напуталось в кодах, ридактировать не могу. У меня страницу порядком глючило.
0
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
28.08.2013, 22:17  [ТС] #52
Вот.
0
Миниатюры
Что делает конструктор?  
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; 
 }
0
Hugra
48 / 48 / 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; 
 }
Если я правильно тебя понял
1
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"
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
01.09.2013, 13:20 #56
точка с запятой в 12
1
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
01.09.2013, 13:27  [ТС] #57
Спасибо!!!!!!

Добавлено через 1 минуту
Не придставляю, как она могла отуда деться... Я ведь компилировал ранее, без 13 и 22-31!
0
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");
 
 }
0
iRomul
159 / 100 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
01.09.2013, 13:41 #59
Лишняя точка с запятой в 13
1
zer0mail
2374 / 2004 / 199
Регистрация: 03.07.2012
Сообщений: 7,196
Записей в блоге: 1
01.09.2013, 13:43 #60
Dimka-novitsek, вы читаете сообщения компилятора или воспринимаете их как "набор буковок"?

15 когда копилятор сообщает об ошибке "в строке N", надо смотреть как минимум и предыдущую строку.
36 конструктор по умолчанию - это функция <имя класса>(), т.е. здесь employee(), а такой функции нет.
1
01.09.2013, 13:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2013, 13:43
Привет! Вот еще темы с ответами:

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

Что делает fseek? - C++
Что делает fseek и зачем он нужен? fseek(firstFile,0,SEEK_SET); fseek(secondFile,0,SEEK_SET);

что делает функция? - C++
int slength ( char*str){ int Len = -1; while (++len, *str++); return len; } возвращает длину строки? Добавлено через 42...

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

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