КИТА unofficial
Ноябрь 23, 2024, 10:47:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: 1 ... 4 5 [6] 7 8 ... 24   Вниз
  Печать  
Автор Тема: ИУС-07  (Прочитано 207608 раз)
Описание темы: Посторонним вход ЗАПРЕЩЁН !!!
0 Пользователей и 39 Гостей смотрят эту тему.
Der_Forscher
Первак
*

Карма: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 17


ИУС - 07а


« Ответ #100 : Апрель 07, 2008, 01:41:02 »

artem90

А где деструкторы?  Подмигивающий
Записан

Стреляй во всех, господь разберется
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #101 : Апрель 07, 2008, 01:41:52 »

А где деструкторы? 

забыл , спс, щас сделю
Записан
Der_Forscher
Первак
*

Карма: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 17


ИУС - 07а


« Ответ #102 : Апрель 07, 2008, 01:54:23 »

artem90

Вот-вот. Делай, а то память не резиновая и смотри ни забудь про них на модуле.

Максим Владимирович - RULES (ИМХО)
Записан

Стреляй во всех, господь разберется
Fr0sT
Очень добрый
Первак
*

Карма: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 45

ИУС 07


« Ответ #103 : Апрель 07, 2008, 02:16:14 »

if(((*(spisok+i))->getDolg())>1)
Так не читабельнее? (не говоря уже о проще)
(spisok[index]->getDolg()>1)
Записан

Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
Anna
Бакалавр
**

Карма: +10/-0
Offline Offline

Пол: Женский
Награды:
III место в фотоконкурсе \
Сообщений: 141



« Ответ #104 : Апрель 07, 2008, 02:18:39 »

Максим Владимирович - RULES (ИМХО)
А что такое "RULES"?
Записан
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #105 : Апрель 07, 2008, 02:29:22 »

А где деструкторы? 

Есть загвоздка:

  Так как мы создавали массив указателей на базовый класс, который включает в себя 2-ух наследников, то при записи    delete *(spisok+i)  в цикле, компилятор не поймет деструктор какого именно класса нужно вызвать. Для этого нужно объявить виртуальный деструктор в базовом классе.

Но тут еще одна загвоздка:

   У нас ведь АБСТРАКТНЫЙ клас, а линкер не разрешает создание деструкторов для АБК. Поэтому. не зная точно как выйти из этой ситуации я сделал отдельный виртуальный метод  freeRAM(). Кто знает другой способ, напишите, потому что у меня такое ощущение что делать через отдельный метод освобождение памяти, это как-то через попу.

Код: (cpp)
#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 Offline

Пол: Мужской
Сообщений: 17


ИУС - 07а


« Ответ #106 : Апрель 07, 2008, 02:38:33 »

artem90
Cоздай виртуальній деструктор для ABC_Study
Записан

Стреляй во всех, господь разберется
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #107 : Апрель 07, 2008, 02:39:21 »

Cоздай виртуальній деструктор для ABC_Study

Это АБСТРАКТНЫЙ клас, а линкер не разрешает создание деструкторов для АБК.
Записан
Fr0sT
Очень добрый
Первак
*

Карма: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 45

ИУС 07


« Ответ #108 : Апрель 07, 2008, 02:42:12 »

Annaвот ссылка
artem90, речь идет о виртуальных деструкторах
смотри здесь
Записан

Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #109 : Апрель 07, 2008, 02:59:54 »

Fr0sT, спс за ссылку
Записан
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #110 : Апрель 07, 2008, 03:15:02 »

линкер не разрешает создание деструкторов для АБК.
Забираю свои слова обратно, все получилось и линкер все разрешил.

Код: (cpp)
#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 Offline

Пол: Мужской
Сообщений: 17


ИУС - 07а


« Ответ #111 : Апрель 07, 2008, 03:49:24 »

222 строки, ниче себе, такое за пару на модуле успеть написать, да чтоб еще и более менее правильно было

Завтра узнаем   Смеющийся Смеющийся Смеющийся Смеющийся Смеющийся
Записан

Стреляй во всех, господь разберется
Polyakov
Специалист
***

Карма: +12/-7
Offline Offline

Сообщений: 164


« Ответ #112 : Апрель 07, 2008, 07:14:59 »

  Artem90.
Сколько раз я Вам говорил, что данные списков вводятся по одному, а не гамузом в цикле for. Ввели одну запись - сохранили, ввели следующую - сохранили и т.д. О структурах данных с прошлого семестра судя по Вашему примеру Вы также забыли. О функциях - и подавно забыли (Одно из определений: Функция - это неоднократно повторяющаяся часть кода, которая может быть оформлена в виде отдельного программного блока). Посмотрите - сколько у Вас повторяющегося кода. Данный пример должен быть как минимум в три-четыре раза меньше.
Записан
Der_Forscher
Первак
*

Карма: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 17


ИУС - 07а


« Ответ #113 : Апрель 08, 2008, 12:07:40 »

Народ делимся хто как хреново модуль по ООП написал! Я галимый ПЛУГ  :'( :'( :'( Шокирован Шокирован Надеюсь Максим Владимирович смилуется  Улыбка
Записан

Стреляй во всех, господь разберется
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #114 : Апрель 08, 2008, 12:16:52 »

Я галимый ПЛУГ       Надеюсь Максим Владимирович смилуется 

Надеюсь надо мной тоже, я теорию не успел написать.

ЗЫ: Интересно, а если сдал 3 лабы и 4 выча, можно будет как-нить их поменять на ненаписанную теорию  Улыбка очень хотелось бы  :'(
Записан
Fr0sT
Очень добрый
Первак
*

Карма: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 45

ИУС 07


« Ответ #115 : Апрель 08, 2008, 12:17:49 »

Я тоже плуг. Написал нерабочий код. Зато компилящийся  Шокирован(это впервые с 1го раза)
Записан

Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
Anna
Бакалавр
**

Карма: +10/-0
Offline Offline

Пол: Женский
Награды:
III место в фотоконкурсе \
Сообщений: 141



« Ответ #116 : Апрель 08, 2008, 12:18:41 »

Расстроилась  Грустный

Это только мне в таких случаях приходят в голову мысли вроде "и нафиг я на ИУС сунулась, ведь отговаривали" или "че я вообще здесь делаю, тут же только умных держат" ?
Записан
Fr0sT
Очень добрый
Первак
*

Карма: +3/-0
Offline Offline

Пол: Мужской
Сообщений: 45

ИУС 07


« Ответ #117 : Апрель 08, 2008, 12:20:57 »

Anna, мне не приходят. Но придут в голову родным, когда они узнают оценку (если узнают  Подмигивающий)
Записан

Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #118 : Апрель 08, 2008, 12:23:17 »

то только мне в таких случаях приходят в голову мысли вроде "и нафиг я на ИУС сунулась, ведь отговаривали" или "че я вообще здесь делаю, тут же только умных держат" ?

нет, мне седня тоже пришла.

ЗЫ: блин, готовился еще с самого начала 2 сем, делал лабы, вычи и так обидно, что все так закончилось Грустный нету теории, и прога, которая хоть и норм работает, но я кое что не учел када писал там на модуле. а дома уже нашел все недочеты ((
Записан
Der_Forscher
Первак
*

Карма: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 17


ИУС - 07а


« Ответ #119 : Апрель 08, 2008, 12:41:39 »

Народ а че так про иус
Записан

Стреляй во всех, господь разберется
Страниц: 1 ... 4 5 [6] 7 8 ... 24   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.104 секунд. Запросов: 34.