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

конструктор с параметрами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Eiphoria
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 21
04.06.2011, 15:34     конструктор с параметрами #1
Не получается конструктор с параметром.. помогите пожалуйста!
вот весь класс, нужно чтобы можно было в main писать вот так например:
Student Petrov("Fam2","Im1","Otch1");
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
94
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
 
class Student {
private:
 char *familia;
 char *im;
 char *otchestvo;
 int ekz1;
 int ekz2;
 int ekz3;
 int ekz4;
public:
 
Student ():familia(NULL),im(NULL),otchestvo(NULL),ekz1(0),
ekz2(0),ekz3(0),ekz4(0){}
 
//понятно, что надо здесь описать конструктор с параметром, вот описываю: 
Student (char * familia, char * im, char * otchestvo); //вот описала, а что дальше - не знаю 
 
 
void SetStud(char* fbuf,char* nbuf,char* obuf,int e1,int e2, int e3, int e4);
//void Student(char* fbuf,char* nbuf,char* obuf);
void showStud();
 
char* poisk(){ 
return(familia);}
 
 
char* poiskIm(){
return(im);}
 
char* poiskO(){
return(otchestvo);}
};
 
void Student::showStud(){
printf("\n FIO: %s %s %s ",familia,im,otchestvo);
 
printf("\n Ocenki: %d %d %d %d",ekz1,ekz2,ekz3,ekz4);
}
 
void Student::SetStud(char* fbuf,char* nbuf,char* obuf,int e1,int e2, int e3, int e4){
 familia = (char*)calloc (strlen(fbuf),sizeof(char));
 strcpy (familia,fbuf);
 
 im = (char*)calloc (strlen(nbuf),sizeof(char));
 strcpy (im,nbuf);
 
 otchestvo = (char*)calloc (strlen(obuf),sizeof(char));
 strcpy (otchestvo,obuf);
 
 ekz1=e1;
 ekz2=e2;
 ekz3=e3;
 ekz4=e4;
 }
 
char* zer(char *buf, int kol){
  buf[kol-1]='\0';
  return(buf);
}
 
class Group:public Student{
public:
 
 
 
void SetGroup(char* fbuf,char* nbuf,char* obuf,int e1,int e2, int e3, int e4,float sr){
SetStud(fbuf,nbuf,obuf,e1,e2,e3,e4);
sr1=sr;
}
void ShowGr();
 
 
private:
float sr1;
};
 
void Group::ShowGr(){
showStud();
printf("\n Sr ball: %f \n",sr1);
 
}
 
 
void main(){
 
Student Ivanov;
Ivanov.SetStud("Fam1","Im1","Otch1",4,4,4,4);
 
Student Petrov ("Fam2","Im1","Otch1",4,4,4,4);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
04.06.2011, 15:54     конструктор с параметрами #2
C++
1
2
3
Student (char * familia, char * im, char * otchestvo, int k1, int k2, int k3, int k4){
    SetStud(familia, im, otchestvo, k1, k2, k3, k4);
}
Eiphoria
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 21
04.06.2011, 16:08  [ТС]     конструктор с параметрами #3
спасибо, щас оценю)) тут пока сама вроде написала что-то)

вот так если описать?
компилятор вроде не ругается..



C++
1
2
3
4
5
Student::Student (char *familia, char *im, char *otchestvo)
{ strcpy (Student::familia, familia);
strcpy(Student::im, im);
strcpy(Student::otchestvo, otchestvo);
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
04.06.2011, 16:26     конструктор с параметрами #4
Цитата Сообщение от Eiphoria Посмотреть сообщение
вот так если описать?
компилятор вроде не ругается..
C++
1
2
3
4
5
Student::Student (char *familia, char *im, char *otchestvo)
{ strcpy (Student::familia, familia);
strcpy(Student::im, im);
strcpy(Student::otchestvo, otchestvo);
}
Компилятор не ругается, но ошибка есть. Прежде чем копировать данные для них надо выделить место. В функции SetStud это делается , а здесь нет. Ну а раз готовая функция уже есть, то чтобы не размножать код логичнее вызвать её, что и было предложено.
Кстати, в SetStud выделяется недостаточно памяти, так как помимо символов строки надо хранить ещё и завершающий строку ноль.
Ну и неплохо бы ещё деструктор объявить, где будет освобождаться выделенная память.
Eiphoria
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 21
04.06.2011, 16:37  [ТС]     конструктор с параметрами #5
ага, понятно... что-то действительно память забыла выделить))

а разве деструктор, если его не описать самим, не будет выполняться автоматически?!
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
04.06.2011, 16:39     конструктор с параметрами #6
Деструктор действительно будет создан компилятором автоматически, но только он ничего делать не будет, поскольку он ничего не знает про динамическое выделение памяти.
Eiphoria
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 21
04.06.2011, 17:12  [ТС]     конструктор с параметрами #7
вон оно что))
то есть надо сначала описать сам деструктор (это понятно), а потом для фамилии, имени и отчества сделать free?

извиняюсь за тупые вопросы) просто приходится самой разбираться с классами, а это оказалось сложно для моего мозга))
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
04.06.2011, 17:31     конструктор с параметрами #8
Да, free надо вызвать в деструкторе для всех данных, для которых вызывался alloc
Правда в C++ для выделения/удаления существует специальная пара операторов new/delete, но и сишными функциями никто не запрещал пользоваться Только смешивать их не стоит.
А ещё для массивов в современном C++ можно использовать vector, который будет удаляться автоматически. Но в достандартных компиляторах векторов может и не быть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2011, 17:56     конструктор с параметрами
Еще ссылки по теме:

C++ Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Как вызвать конструктор с параметрами в конструкторе без параметров? C++
Конструктор с параметрами C++

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

Или воспользуйтесь поиском по форуму:
Eiphoria
0 / 0 / 0
Регистрация: 19.12.2010
Сообщений: 21
04.06.2011, 17:56  [ТС]     конструктор с параметрами #9
ясненько))
про delete тоже читала, но как-то free понятнее))

а vector не могу использовать, так как компилирую в bc3.1, а в те времена, как я поняла, до vector'a дело не дошло)))

в общем, еще раз спасибо, вы очень помогли)
Yandex
Объявления
04.06.2011, 17:56     конструктор с параметрами
Ответ Создать тему
Опции темы

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