Консультация № 178728
29.05.2010, 13:23
42.57 руб.
0 3 1
Здравствуйте.
Обращаюсь к вам за помощью. Нужно разобраться в коде и объяснить что означает каждая строчка программы(особое внимание уделить тексту кода в самом вопросе).
Помогите пожалуйста разобраться с программой.

list::~list()
{test* A;
while(begin!=0)
{A=begin;
begin=begin->next;
delete A;
}}

void list::insert(test* B)
{
test *A;
A=begin;
begin=B;
B->next=A;
}
void list::show()
{
test *A;
A=begin;
while(A!=0)
{
A->show();
A=A->next;
}}
int main()
{
list list;
ekzamen *x1;
vipuskekzamen *x2;
ispitanie *x3;
x1= new ekzamen;
x2= new vipuskekzamen;
x3=new ispitanie;
x1->input();
x2->input();
x3->input();
cout<<"------------------------";
list.insert(x3);
list.insert(x2);
list.insert(x1);
list.show();


Приложение:

#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <string>
#include <conio.h>
using namespace std;

class test
{
public:
test() {strcpy(name,"");}
test(char* NAME) {strcpy(name,NAME);}
virtual void show()=0;
virtual void input()=0;
friend class list;
protected:
char *name;
test* next;

};

class ekzamen:public test
{
public:
ekzamen(){res=0;}
ekzamen(int RES){res=RES;}
ekzamen(char* NAME,int RES):test(NAME)
{
res=RES;
}
void show()
{
cout<<"\n NAME testiruemij:"<<name;
cout<<"\n rezultat:"<<res;
cout<<"\n";
}
void input()

{
cout<<"\n NAME testiruemij:";cin >>name;
cout<<"\n rezultat:";cin>>res;
cout<<"\n";
}
protected:
int res;
};


class vipuskekzamen:public test
{
public:
vipuskekzamen(){res=0;}
vipuskekzamen(int RES){res=RES;}
vipuskekzamen(char* NAME,int RES):test(NAME)
{
res=RES;
}
void show()
{
cout<<"\n NAME vipusknik:"<<name;
cout<<"\n rezultat:"<<res;
cout<<"\n";
}
void input()
{
cout<<"\n NAME vipusknik:"; cin>>name;
cout<<"\n rezultat:"; cin>>res;
cout<<"\n";
}
protected:
int res;
};


class ispitanie:public test
{
public:
ispitanie(){res=0;};
ispitanie(int RES){res=RES;}
ispitanie(char* NAME,int RES):test(NAME)
{
res=RES;
}
void show()
{
cout<<"\n NAME ispituemogo:"<<name;
cout<<"\n kol-vo isituemix:"<<res;
cout<<"\n";
}
void input()
{
cout<<"\n NAME ispituemogo:";cin>>name;
cout<<"\n k-vo ispituemix:";cin>>res;
cout<<"\n";
}
protected:
int res;
};

class list
{
private:
test* begin;
public:
list() {begin=0;}
~list();
void insert(test*);
void show();
};

list::~list()
{test* A;
while(begin!=0)
{A=begin;
begin=begin->next;
delete A;
}}

void list::insert(test* B)
{
test *A;
A=begin;
begin=B;
B->next=A;
}
void list::show()
{
test *A;
A=begin;
while(A!=0)
{
A->show();
A=A->next;
}}
int main()
{
list list;
ekzamen *x1;
vipuskekzamen *x2;
ispitanie *x3;
x1= new ekzamen;
x2= new vipuskekzamen;
x3=new ispitanie;
x1->input();
x2->input();
x3->input();
cout<<"------------------------";
list.insert(x3);
list.insert(x2);
list.insert(x1);
list.show();

getch();
}

Обсуждение

Неизвестный
29.05.2010, 14:21
общий
01.06.2010, 15:14
это ответ
Здравствуйте, novij2011.
Ответ в приложении.

Приложение:

#include <stdio.h> // подключение
#include <iostream> // внешних заголовочных
#include <cstdlib> // файлов
#include <string> //
#include <conio.h> //
using namespace std;

class test // объявление класса test
{
public: // свойства и функции, доступные другим классам
test() {strcpy(name,"");} // конструктор класса test::test() - создает класс и инициализирует свойство класса name = ""
test(char* NAME) {strcpy(name,NAME);} // тоже конструктор (перезагруженный) инициализирует name текстом, указанным при вызове коструктора
virtual void show()=0; // объявление метода show()
virtual void input()=0; // объявление метода input()
friend class list; // объявление класса, который может получать доступ к защищенным свойствам класса (в данном случае list)
protected: // защищенные свойства
char *name; // указатель на данные типа char
test* next; // указатель на объект типа test

};
// класс test является родителем для классов ekzamenб, vipuskekzamen, ispitanie
class ekzamen:public test // класс является наследником класса test
{
public:
ekzamen(){res=0;} // конструктор класса test::test() - создает класс и инициализирует свойство класса name = ""
ekzamen(int RES){res=RES;} // тоже конструктор (перезагруженный) инициализирует res числом, указанным при вызове коструктора
ekzamen(char* NAME,int RES):test(NAME) // тоже конструктор (перезагруженный) инициализирует name текстом, указанным при вызове коструктора
// а также res числом ( например ekzamen("first",1) )
{
res=RES;
}
void show() // реализация метода show()
{
cout<<"\n NAME testiruemij:"<<name; // вывести на экран значение свойства name
cout<<"\n rezultat:"<<res;
cout<<"\n"; // перевод строки
}
void input() // реализация метода input()

{
cout<<"\n NAME testiruemij:";cin >>name; // запросить у пользователя значение свойства name
cout<<"\n rezultat:";cin>>res;
cout<<"\n";
}
protected:
int res; // свойство res
};


class vipuskekzamen:public test
{
public:
vipuskekzamen(){res=0;} // описание аналогично предидущему классу
vipuskekzamen(int RES){res=RES;}
vipuskekzamen(char* NAME,int RES):test(NAME)
{
res=RES;
}
void show()
{
cout<<"\n NAME vipusknik:"<<name;
cout<<"\n rezultat:"<<res;
cout<<"\n";
}
void input()
{
cout<<"\n NAME vipusknik:"; cin>>name;
cout<<"\n rezultat:"; cin>>res;
cout<<"\n";
}
protected:
int res;
};


class ispitanie:public test // описание аналогично предидущему классу
{
public:
ispitanie(){res=0;};
ispitanie(int RES){res=RES;}
ispitanie(char* NAME,int RES):test(NAME)
{
res=RES;
}
void show()
{
cout<<"\n NAME ispituemogo:"<<name;
cout<<"\n kol-vo isituemix:"<<res;
cout<<"\n";
}
void input()
{
cout<<"\n NAME ispituemogo:";cin>>name;
cout<<"\n k-vo ispituemix:";cin>>res;
cout<<"\n";
}
protected:
int res;
};

class list // объявление класса list
{
private:
test* begin; // свойство begin - указатель на класс типа test ( может былть любой из классов ekzamenб, vipuskekzamen, ispitanie )
public:
list() {begin=0;} // конструктор класса инициализирует свойство begin нулём
~list(); // деструктор класса
void insert(test*); //метод insert() (добавляет в класс указатели на объекты типа test)
void show(); // метод show()
};

list::~list() // деструктор класса
{test* A; // локальный указатель на класс типа test
while(begin!=0) // продолжить пока свойство класса begin не станет равным 0
{A=begin; // берем текущее значение begin в переменную A
begin=begin->next; // передвигаем указатель на следующий элемент списка
delete A; // удаляем объект, привязанный к указателю A
// деструктор выполняет удаление объектов привязанных к списку для очистки памяти приложения
}}

void list::insert(test* B) // добавление указателя на объект типа test в список
{
test *A;
A=begin; // поместим текущий указатель в локальную переменную
begin=B; // присвоим свойству класса begin значение, указанное при вызове этого метода
B->next=A; // присвоим для объекта, указанного при вызове, свойство next равное указателю н предыдущий объект
}
void list::show() // метод show() последовательно вызывает методы show() объектов, добавленных в этот объект
{ // методом insert()
test *A;
A=begin; // поместить в локальную переменную текущий указатель
while(A!=0) // продолжать пока указатель не станет равным нулю
{
A->show(); // вызвать для текущего объекта метод show()
A=A->next; // взять следующий объект
}}
int main()
{
list list; // класс list с именем list
ekzamen *x1; // указатель x1 на класс ekzamen
vipuskekzamen *x2; // указатель x2 на класс vipuskekzamen
ispitanie *x3; // указатель x3 на класс vipuskekzamen
x1= new ekzamen; // содать объект класса ekzamen
x2= new vipuskekzamen; // содать объект класса vipuskekzamen
x3=new ispitanie; // содать объект класса ispitanie
x1->input(); // выполнить метод класса ekzamen::input()
x2->input(); // выполнить метод класса vipuskekzamen::input()
x3->input(); // выполнить метод класса ispitanie::input()
cout<<"-----------------------<WBR>-"; // просто вывести на экран эту строку
list.insert(x3); // вставить в list объект ispitanie
list.insert(x2); // вставить в list объект vipuskekzamen
list.insert(x1); // вставить в list объект ekzamen
list.show(); // выполнить метод класса list show()

getch(); // подождать нажатия любой клавиши
}
Неизвестный
29.05.2010, 14:23
общий
большое спасибо
Неизвестный
01.06.2010, 15:13
общий
Хоменко Владимир Александрович:
Помещайте код в приложение, пожалуйста.
Форма ответа