Der_Forscher
Первак
Карма: +1/-0
Offline
Пол:
Сообщений: 17
ИУС - 07а
|
|
« Ответ #100 : Апрель 07, 2008, 01:41:02 » |
|
artem90А где деструкторы?
|
|
|
Записан
|
Стреляй во всех, господь разберется
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #101 : Апрель 07, 2008, 01:41:52 » |
|
А где деструкторы? забыл , спс, щас сделю
|
|
|
Записан
|
|
|
|
Der_Forscher
Первак
Карма: +1/-0
Offline
Пол:
Сообщений: 17
ИУС - 07а
|
|
« Ответ #102 : Апрель 07, 2008, 01:54:23 » |
|
artem90
Вот-вот. Делай, а то память не резиновая и смотри ни забудь про них на модуле.
Максим Владимирович - RULES (ИМХО)
|
|
|
Записан
|
Стреляй во всех, господь разберется
|
|
|
Fr0sT
Очень добрый
Первак
Карма: +3/-0
Offline
Пол:
Сообщений: 45
ИУС 07
|
|
« Ответ #103 : Апрель 07, 2008, 02:16:14 » |
|
if(((*(spisok+i))->getDolg())>1) Так не читабельнее? (не говоря уже о проще) (spisok[index]->getDolg()>1)
|
|
|
Записан
|
Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
|
|
|
Anna
Бакалавр
Карма: +10/-0
Offline
Пол: Награды:
Сообщений: 141
|
|
« Ответ #104 : Апрель 07, 2008, 02:18:39 » |
|
Максим Владимирович - RULES (ИМХО) А что такое "RULES"?
|
|
|
Записан
|
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #105 : Апрель 07, 2008, 02:29:22 » |
|
А где деструкторы? Есть загвоздка: Так как мы создавали массив указателей на базовый класс, который включает в себя 2-ух наследников, то при записи delete *(spisok+i) в цикле, компилятор не поймет деструктор какого именно класса нужно вызвать. Для этого нужно объявить виртуальный деструктор в базовом классе. Но тут еще одна загвоздка: У нас ведь АБСТРАКТНЫЙ клас, а линкер не разрешает создание деструкторов для АБК. Поэтому. не зная точно как выйти из этой ситуации я сделал отдельный виртуальный метод freeRAM(). Кто знает другой способ, напишите, потому что у меня такое ощущение что делать через отдельный метод освобождение памяти, это как-то через попу. #include <iostream.h> #include <stdio.h> #include <fstream.h> #include <process.h> #include <string.h> #include <conio.h>
class ABC_Study { protected: char *name; char *lastName; char *fatherName; char *department; char *special; int code; int dolg;
public: int getDolg() { return dolg; } virtual void printFile(const char *fileName)=0; virtual void freeRAM()=0; };
class Student: public ABC_Study { char *group;
public: Student(char *t_name=NULL, char *t_lastName=NULL, char *t_fatherName=NULL, char *t_department=NULL, char *t_special=NULL, char *t_group=NULL, int t_code=0, int t_dolg=0); void printFile(const char *fileName); virtual void freeRAM(); };
class Aspirant: public ABC_Study { char *instructor;
public: Aspirant(char *t_name=NULL, char *t_lastName=NULL, char *t_fatherName=NULL, char *t_department=NULL, char *t_special=NULL, char *t_instructor=NULL, int t_code=0, int t_dolg=0); void printFile(const char *fileName); virtual void freeRAM(); };
Student::Student(char *t_name, char *t_lastName, char *t_fatherName, char *t_department, char *t_special, char *t_group, int t_code, int t_dolg) { int length;
length=strlen(t_name); name=new char[length+1]; strcpy(name,t_name);
length=strlen(t_lastName); lastName=new char[length+1]; strcpy(lastName,t_lastName);
length=strlen(t_fatherName); fatherName=new char[length+1]; strcpy(fatherName,t_fatherName);
length=strlen(t_department); department=new char[length+1]; strcpy(department,t_department);
length=strlen(t_special); special=new char[length+1]; strcpy(special,t_special);
length=strlen(t_group); group=new char[length+1]; strcpy(group,t_group);
code=t_code; dolg=t_dolg; }
void Student::printFile(const char *fileName) { ofstream fout(fileName,ios::app); if(!fout) { cout<<"ERROR: Press any key to exit..."; getch(); exit(1); } fout<<name<<" "<<lastName<<" "<<fatherName<<" "<<department<<" "<<special<<" "<<code<<" "<<group<<" "<<" "<<dolg<<endl; }
void Student::freeRAM() { delete name; delete lastName; delete fatherName; delete department; delete special; delete group; cout<<"Destructor - STUDENT"<<endl; }
Aspirant::Aspirant(char *t_name, char *t_lastName, char *t_fatherName, char *t_department, char *t_special, char *t_instructor, int t_code, int t_dolg) { int length;
length=strlen(t_name); name=new char[length+1]; strcpy(name,t_name);
length=strlen(t_lastName); lastName=new char[length+1]; strcpy(lastName,t_lastName);
length=strlen(t_fatherName); fatherName=new char[length+1]; strcpy(fatherName,t_fatherName);
length=strlen(t_department); department=new char[length+1]; strcpy(department,t_department);
length=strlen(t_special); special=new char[length+1]; strcpy(special,t_special);
length=strlen(t_instructor); instructor=new char[length+1]; strcpy(instructor,t_instructor);
code=t_code; dolg=t_dolg; }
void Aspirant::printFile(const char *fileName) { ofstream fout(fileName,ios::app); if(!fout) { cout<<"ERROR: Press any key to exit..."; getch(); exit(1); } fout<<name<<" "<<lastName<<" "<<fatherName<<" "<<department<<" "<<special<<" "<<code<<" "<<instructor<<" "<<dolg<<endl; }
void Aspirant::freeRAM() { delete name; delete lastName; delete fatherName; delete department; delete special; delete instructor; cout<<"Destructor - ASPIRANT"<<endl; }
void main() { int i,stud,aspir,code,dolg; char fileName[50],name[15],lastName[20],fatherName[30],department[30],special[20],group[20],instructor[20];
cout<<"Enter the quantity os students: "; cin>>stud; cout<<"Enter the quantity os aspirants: "; cin>>aspir;
ABC_Study **spisok; spisok=new ABC_Study*[stud+aspir];
cout<<endl<<"Enter the data of students:"<<endl; for(i=0;i<stud;i++) { cout<<endl; cout<<"Name: "; cin>>name; cout<<"Last name: "; cin>>lastName; cout<<"Father name: "; cin>>fatherName; cout<<"Department: "; cin>>department; cout<<"Special: "; cin>>special; cout<<"Code: "; cin>>code; cout<<"Group: "; cin>>group; cout<<"Dolg: "; cin>>dolg;
*(spisok+i)=new Student(name,lastName,fatherName,department,special,group,code,dolg); }
cout<<endl<<"Enter the data of aspirants:"<<endl; for(i=stud;i<stud+aspir;i++) { cout<<endl; cout<<"Name: "; cin>>name; cout<<"Last name: "; cin>>lastName; cout<<"Father name: "; cin>>fatherName; cout<<"Department: "; cin>>department; cout<<"Special: "; cin>>special; cout<<"Code: "; cin>>code; cout<<"Instructor: "; cin>>instructor; cout<<"Dolg: "; cin>>dolg;
*(spisok+i)=new Aspirant(name,lastName,fatherName,department,special,instructor,code,dolg); }
cout<<endl<<"Enter the name of output file: "; cin>>fileName;
for(i=0;i<stud+aspir;i++) { if(((*(spisok+i))->getDolg())>1) { (*(spisok+i))->printFile(fileName); } }
for(i=0;i<stud+aspir;i++) { (*(spisok+i))->freeRAM(); } delete[]spisok; }
|
|
|
Записан
|
|
|
|
Der_Forscher
Первак
Карма: +1/-0
Offline
Пол:
Сообщений: 17
ИУС - 07а
|
|
« Ответ #106 : Апрель 07, 2008, 02:38:33 » |
|
artem90 Cоздай виртуальній деструктор для ABC_Study
|
|
|
Записан
|
Стреляй во всех, господь разберется
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #107 : Апрель 07, 2008, 02:39:21 » |
|
Cоздай виртуальній деструктор для ABC_Study Это АБСТРАКТНЫЙ клас, а линкер не разрешает создание деструкторов для АБК.
|
|
|
Записан
|
|
|
|
Fr0sT
Очень добрый
Первак
Карма: +3/-0
Offline
Пол:
Сообщений: 45
ИУС 07
|
|
« Ответ #108 : Апрель 07, 2008, 02:42:12 » |
|
Anna, вот ссылкаartem90, речь идет о виртуальных деструкторах смотри здесь
|
|
|
Записан
|
Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #109 : Апрель 07, 2008, 02:59:54 » |
|
Fr0sT, спс за ссылку
|
|
|
Записан
|
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #110 : Апрель 07, 2008, 03:15:02 » |
|
линкер не разрешает создание деструкторов для АБК. Забираю свои слова обратно, все получилось и линкер все разрешил. #include <iostream.h> #include <stdio.h> #include <fstream.h> #include <process.h> #include <string.h> #include <conio.h>
class ABC_Study { protected: char *name; char *lastName; char *fatherName; char *department; char *special; int code; int dolg;
public: int getDolg() { return dolg; } virtual void printFile(const char *fileName)=0; virtual ~ABC_Study() { }; };
class Student: public ABC_Study { char *group;
public: Student(char *t_name=NULL, char *t_lastName=NULL, char *t_fatherName=NULL, char *t_department=NULL, char *t_special=NULL, char *t_group=NULL, int t_code=0, int t_dolg=0); ~Student(); void printFile(const char *fileName); };
class Aspirant: public ABC_Study { char *instructor;
public: Aspirant(char *t_name=NULL, char *t_lastName=NULL, char *t_fatherName=NULL, char *t_department=NULL, char *t_special=NULL, char *t_instructor=NULL, int t_code=0, int t_dolg=0); ~Aspirant(); void printFile(const char *fileName); };
Student::Student(char *t_name, char *t_lastName, char *t_fatherName, char *t_department, char *t_special, char *t_group, int t_code, int t_dolg) { int length;
length=strlen(t_name); name=new char[length+1]; strcpy(name,t_name);
length=strlen(t_lastName); lastName=new char[length+1]; strcpy(lastName,t_lastName);
length=strlen(t_fatherName); fatherName=new char[length+1]; strcpy(fatherName,t_fatherName);
length=strlen(t_department); department=new char[length+1]; strcpy(department,t_department);
length=strlen(t_special); special=new char[length+1]; strcpy(special,t_special);
length=strlen(t_group); group=new char[length+1]; strcpy(group,t_group);
code=t_code; dolg=t_dolg; }
void Student::printFile(const char *fileName) { ofstream fout(fileName,ios::app); if(!fout) { cout<<"ERROR: Press any key to exit..."; getch(); exit(1); } fout<<name<<" "<<lastName<<" "<<fatherName<<" "<<department<<" "<<special<<" "<<code<<" "<<group<<" "<<" "<<dolg<<endl; }
Student::~Student() { delete name; delete lastName; delete fatherName; delete department; delete special; delete group; cout<<"Destructor - STUDENT"<<endl; }
Aspirant::Aspirant(char *t_name, char *t_lastName, char *t_fatherName, char *t_department, char *t_special, char *t_instructor, int t_code, int t_dolg) { int length;
length=strlen(t_name); name=new char[length+1]; strcpy(name,t_name);
length=strlen(t_lastName); lastName=new char[length+1]; strcpy(lastName,t_lastName);
length=strlen(t_fatherName); fatherName=new char[length+1]; strcpy(fatherName,t_fatherName);
length=strlen(t_department); department=new char[length+1]; strcpy(department,t_department);
length=strlen(t_special); special=new char[length+1]; strcpy(special,t_special);
length=strlen(t_instructor); instructor=new char[length+1]; strcpy(instructor,t_instructor);
code=t_code; dolg=t_dolg; }
void Aspirant::printFile(const char *fileName) { ofstream fout(fileName,ios::app); if(!fout) { cout<<"ERROR: Press any key to exit..."; getch(); exit(1); } fout<<name<<" "<<lastName<<" "<<fatherName<<" "<<department<<" "<<special<<" "<<code<<" "<<instructor<<" "<<dolg<<endl; }
Aspirant::~Aspirant() { delete name; delete lastName; delete fatherName; delete department; delete special; delete instructor; cout<<"Destructor - ASPIRANT"<<endl; }
void main() { int i,stud,aspir,code,dolg; char fileName[50],name[15],lastName[20],fatherName[30],department[30],special[20],group[20],instructor[20];
cout<<"Enter the quantity os students: "; cin>>stud; cout<<"Enter the quantity os aspirants: "; cin>>aspir;
ABC_Study **spisok; spisok=new ABC_Study*[stud+aspir];
cout<<endl<<"Enter the data of students:"<<endl; for(i=0;i<stud;i++) { cout<<endl; cout<<"Name: "; cin>>name; cout<<"Last name: "; cin>>lastName; cout<<"Father name: "; cin>>fatherName; cout<<"Department: "; cin>>department; cout<<"Special: "; cin>>special; cout<<"Code: "; cin>>code; cout<<"Group: "; cin>>group; cout<<"Dolg: "; cin>>dolg;
*(spisok+i)=new Student(name,lastName,fatherName,department,special,group,code,dolg); }
cout<<endl<<"Enter the data of aspirants:"<<endl; for(i=stud;i<stud+aspir;i++) { cout<<endl; cout<<"Name: "; cin>>name; cout<<"Last name: "; cin>>lastName; cout<<"Father name: "; cin>>fatherName; cout<<"Department: "; cin>>department; cout<<"Special: "; cin>>special; cout<<"Code: "; cin>>code; cout<<"Instructor: "; cin>>instructor; cout<<"Dolg: "; cin>>dolg;
*(spisok+i)=new Aspirant(name,lastName,fatherName,department,special,instructor,code,dolg); }
cout<<endl<<"Enter the name of output file: "; cin>>fileName;
for(i=0;i<stud+aspir;i++) { if(((*(spisok+i))->getDolg())>1) { (*(spisok+i))->printFile(fileName); } }
for(i=0;i<stud+aspir;i++) { delete *(spisok+i); } delete[]spisok; }
ЗЫ: 222 строки, ниче себе, такое за пару на модуле успеть написать, да чтоб еще и более менее правильно было
|
|
|
Записан
|
|
|
|
Der_Forscher
Первак
Карма: +1/-0
Offline
Пол:
Сообщений: 17
ИУС - 07а
|
|
« Ответ #111 : Апрель 07, 2008, 03:49:24 » |
|
|
|
|
Записан
|
Стреляй во всех, господь разберется
|
|
|
Polyakov
Специалист
Карма: +12/-7
Offline
Сообщений: 164
|
|
« Ответ #112 : Апрель 07, 2008, 07:14:59 » |
|
Artem90. Сколько раз я Вам говорил, что данные списков вводятся по одному, а не гамузом в цикле for. Ввели одну запись - сохранили, ввели следующую - сохранили и т.д. О структурах данных с прошлого семестра судя по Вашему примеру Вы также забыли. О функциях - и подавно забыли (Одно из определений: Функция - это неоднократно повторяющаяся часть кода, которая может быть оформлена в виде отдельного программного блока). Посмотрите - сколько у Вас повторяющегося кода. Данный пример должен быть как минимум в три-четыре раза меньше.
|
|
|
Записан
|
|
|
|
Der_Forscher
Первак
Карма: +1/-0
Offline
Пол:
Сообщений: 17
ИУС - 07а
|
|
« Ответ #113 : Апрель 08, 2008, 12:07:40 » |
|
Народ делимся хто как хреново модуль по ООП написал! Я галимый ПЛУГ :'( :'( :'( Надеюсь Максим Владимирович смилуется
|
|
|
Записан
|
Стреляй во всех, господь разберется
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #114 : Апрель 08, 2008, 12:16:52 » |
|
Я галимый ПЛУГ Надеюсь Максим Владимирович смилуется Надеюсь надо мной тоже, я теорию не успел написать. ЗЫ: Интересно, а если сдал 3 лабы и 4 выча, можно будет как-нить их поменять на ненаписанную теорию очень хотелось бы :'(
|
|
|
Записан
|
|
|
|
Fr0sT
Очень добрый
Первак
Карма: +3/-0
Offline
Пол:
Сообщений: 45
ИУС 07
|
|
« Ответ #115 : Апрель 08, 2008, 12:17:49 » |
|
Я тоже плуг. Написал нерабочий код. Зато компилящийся (это впервые с 1го раза)
|
|
|
Записан
|
Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
|
|
|
Anna
Бакалавр
Карма: +10/-0
Offline
Пол: Награды:
Сообщений: 141
|
|
« Ответ #116 : Апрель 08, 2008, 12:18:41 » |
|
Расстроилась Это только мне в таких случаях приходят в голову мысли вроде "и нафиг я на ИУС сунулась, ведь отговаривали" или "че я вообще здесь делаю, тут же только умных держат" ?
|
|
|
Записан
|
|
|
|
Fr0sT
Очень добрый
Первак
Карма: +3/-0
Offline
Пол:
Сообщений: 45
ИУС 07
|
|
« Ответ #117 : Апрель 08, 2008, 12:20:57 » |
|
Anna, мне не приходят. Но придут в голову родным, когда они узнают оценку (если узнают )
|
|
|
Записан
|
Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
|
|
|
Артем
sprata
Mодератор
Завкаф
Карма: +40/-5
Offline
Пол:
Сообщений: 1107
|
|
« Ответ #118 : Апрель 08, 2008, 12:23:17 » |
|
то только мне в таких случаях приходят в голову мысли вроде "и нафиг я на ИУС сунулась, ведь отговаривали" или "че я вообще здесь делаю, тут же только умных держат" ? нет, мне седня тоже пришла. ЗЫ: блин, готовился еще с самого начала 2 сем, делал лабы, вычи и так обидно, что все так закончилось нету теории, и прога, которая хоть и норм работает, но я кое что не учел када писал там на модуле. а дома уже нашел все недочеты ((
|
|
|
Записан
|
|
|
|
Der_Forscher
Первак
Карма: +1/-0
Offline
Пол:
Сообщений: 17
ИУС - 07а
|
|
« Ответ #119 : Апрель 08, 2008, 12:41:39 » |
|
Народ а че так про иус
|
|
|
Записан
|
Стреляй во всех, господь разберется
|
|
|
|