|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.12.2008, 21:41 | #11 | |
Пользователь
Регистрация: 04.12.2008
Сообщений: 13
|
Цитата:
|
|
04.12.2008, 22:14 | #12 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
_alexey_ ! Вы не могли бы мне помочь?
|
05.12.2008, 10:41 | #13 |
Пользователь
Регистрация: 04.12.2008
Сообщений: 13
|
примерно так:
Код:
Последний раз редактировалось _alexey_; 05.12.2008 в 11:04. |
09.12.2008, 20:02 | #14 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
Благодарю за ответ!
|
09.12.2008, 20:20 | #15 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
Помогите, пожалуйста, срочно!!! Что неверно в прегрузке операции [] ??? Как исправить???
#include <iostream.h>
#include <conio.h> #include <string.h> //АТД class Atd{ class Spisok { public: char simv,*str; //Данные Spisok *next; //Указатель на следующий узел Spisok (char x = NULL) //Конструктор { simv = x; next = NULL; } }; Spisok *begin, *end; //Указатели на начало, конец списка и следующий узел char* str; public: Atd (); //Конструктор по умолчанию Atd (char *str); //Конструктор с параметрами ~Atd(); //Деструктор bool operator !=(const Atd&); //Перегрузка операции != - проверка на неравенство Atd& operator =(const Atd&); //Перегрузка операции присваивания Atd& operator +(const Atd&); //Перегрузка операции + -объединить два списка (Atd+Atd) char& operator [](int i); //Перегрузка операции [] -доступ к элементу в заданной позиции (например: int i; char c;list L;c=L[i]) // void Input(); //Ввод с клавиатуры void Print(); //Функция вывода на экран }; //Конструктор с параметрами Atd :: Atd (char* str) { Spisok *pv = new Spisok; pv->simv = str[0]; begin = end = pv; for (int i=1; i <= (int)strlen(str); i++) { Spisok *pv = new Spisok; pv->simv = str[i]; end->next = pv; end = pv; } cout << endl << "vyzvan konstruktor c parametrami.\n"; } //Деструктор Atd :: ~Atd () { if (begin != NULL ) { Spisok *pv = begin; while (pv) { pv = pv->next; delete begin; begin = pv; } } cout << endl << "vyzvan destructor.\n"; } //Перегрузка операции присваивания Atd& Atd :: operator =(const Atd& x) { cout << "vyzvana peregruzka operatora '='.\n"; this->~Atd(); char dsimv; Spisok *pv = new Spisok; Spisok *dpv = x.begin; dsimv = dpv->simv; dpv = dpv->next; pv->simv = dsimv; begin = end = pv; while (dpv) { Spisok *pv = new Spisok; dsimv = dpv->simv; pv->simv = dsimv; end->next = pv; end = pv; dpv = dpv->next; }; return (*this); }; //Перегрузка операции + -объединить два списка (Atd+Atd) Atd& Atd :: operator +(const Atd& x) { cout << "vyzvana peregruzka operatora '+'.\n"; Spisok *pv = end; Spisok *dpv = x.begin; pv->next=dpv; while (dpv){ dpv=dpv->next;} return (*this); ;} //----------------------------------------------------------------------- //Перегрузка операции [] -доступ к элементу в заданной позиции (например: int i; char c;list L;c=L[i]) char& Atd :: operator [](int i) { if (i<0 || i > (int)strlen(str)) return str[(int)strlen(str)-1]; else return str[i]; } //----------------------------------------------------------------------- //Проверка АТД на неравенство bool Atd :: operator !=(const Atd& x) { cout << "vyzvana peregruzka operatora '!='.\n"; Spisok *pv = begin; Spisok *dpv = x.begin; while ((pv)&&(dpv)) { if (pv->simv == dpv->simv) return false; pv = pv->next; dpv = dpv->next; } return true; } //статическая компонента-функция просмотра всего списка void Atd :: Print() { Spisok *pv = begin; cout << endl << "Atd: \n"; while (pv) { cout << pv->simv << ' '; pv = pv->next; } cout << endl; } void main() { cout << "Press ENTER to create objects...\n"; getch (); Atd first("IAM"); cout << "object is created.\n" << "Press ENTER to look at it...\n"; getch (); first.Print(); cout << "Press ENTER to create one more object...\n"; getch(); Atd second("ACOUY"); cout << "list is object.\n" << "Press ENTER to look at it...\n"; getch (); second.Print(); cout << endl << "compare them.\n"; cout << "Press ENTER to look at result.\n"; getch (); if (first != second) cout << "They are didn't =.\n"; else cout << "They are =.\n"; first.Print(); second.Print(); cout << endl << "the first object compare to the second object. And following compare them anew.\n"; cout << "Press ENTER to look at result.\n"; getch (); first = second; if (first != second) cout << "They are didn't =.\n"; else cout << "They are =.\n"; first.Print(); second.Print(); cout << endl << "add first list to second.\n"; cout << "Press ENTER to look at result.\n"; getch (); first + second; first.Print(); getch(); cout << endl << "[] simvol from second object.\n"; second.Print(); int i; cout<<"Input index (1-5): "; cin>>i; cout<<second[i]; getch (); } |
02.07.2010, 14:09 | #16 |
Новичок
Джуниор
Регистрация: 02.07.2010
Сообщений: 1
|
Всем привет!!!Помогите пожалуста с прогой аналогично преведущей...очень время поджимает, а я так и не могу разобраться!Вот задание:
АТД однонаправленный список с элементами типа char. Дополнительно перегружать следующие операции: + - Добавить элемент в начало (char + list); - - Удалить элемент сначала (типа - list); = = - Проверка на равенство. БУду очень благодарен! =) |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перегрузка операций new, new[], delete, delete[] | IgorKr | Общие вопросы C/C++ | 1 | 22.10.2008 12:14 |
Конструктор, наследование, перегрузка операций | Lioness | Помощь студентам | 18 | 02.06.2008 20:44 |
Нужна помощь с программой ООП на С++ | Vofka | Фриланс | 3 | 30.11.2007 16:52 |