|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.11.2008, 17:28 | #1 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
Помощь с лабой: «Перегрузка операций» (ООП, класс-АТД, на с++)
Очень прошу,откликнитесь пожалуйста! Очень нужно решение! Уже не знаю сколько пытаюсь разобраться - не получается! Хотя с остальными лабами проблем не было :-(((
Определить и реализовать класс - абстрактный тип данных. Определить и реализовать операции над данными этого класса. Написать и выполнить программу полного тестирования этого класса. //=================================== =============== Вот задание: АДТ-однонаправленный список с элементами типа char. Дополнительно перегрузить следующие операции: [] доступ к элементу в заданной позиции, например: int i; char c; list L; c=L[i]; + объединить два списка; != проверка на неравенство. //=================================== =============== Порядок выполнения работы. 1. Выбрать класс АТД в соответствии с вариантом. 2. Определить и реализовать в классе конструкторы, деструктор, функции Input (ввод с клавиатуры) и Print (вывод на экран), перегрузить операцию присваивания. 3. Написать программу тестирования класса и выполнить тестирование. 4. Дополнить определение класса заданными перегруженными операциями ( в соответствии с вариантом). 5. Реализовать эти операции. Выполнить тестирование. |
30.11.2008, 23:23 | #2 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
Есть кто-нибудь, кто хорошо понимает списки???
|
01.12.2008, 11:37 | #3 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Многие тут всё хорошо понимают, просто поймите, что времени на эту задачку придётся потратить не 5 и не 15 минут.
Мы же помогаем, а не делаем с нуля. Надо решить с нуля - фриланс поможет, за умеренную плату конечно. Иначе давайте то, что у вас получилось, что не работает? |
01.12.2008, 21:08 | #4 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
Осталось две перегрузки(!!!): [] -доступ к элементу в заданной позиции, + -объединить два списка.
#include <iostream.h>
#include <conio.h> #include <string.h> //АТД class Atd{ class Spisok { public: char simv; //Данные Spisok *next; //Указатель на следующий узел Spisok (char x = NULL) //Конструктор {simv = x; next = NULL;} }; Spisok *begin, *end; //Указатели на начало, конец списка public: Atd (); //Конструктор по умолчанию Atd (char *str); //Конструктор с параметрами ~Atd(); //Деструктор bool operator !=(const Atd&); //Перегрузка операции != - проверка на неравенство Atd& operator =(const Atd&); //Перегрузка операции присваивания // Atd& operator +(char); //Перегрузка операции + -объединить два списка (Atd+Atd) // Atd& operator [](char); //Перегрузка операции [] -доступ к элементу в заданной позиции (например: 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 = begin->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 +(Atd& , Atd& ) { cout << "vyzvana peregruzka operatora '+'.\n"; cout << endl << "Atd: \n"; cout << endl; return (*this); }; */ //Перегрузка операции [] -доступ к элементу в заданной позиции (например: int i; char c;list L;c=L[i]) /* Atd& Atd :: operator [](char x) { cout << "vyzvana peregruzka operatora '[]'.\n"; return (*this); }; */ //Проверка АТД на неравенство 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 second object to first object, and [] from second object.\n"; cout << "Press ENTER to look at result.\n"; getch (); */ getch (); } |
01.12.2008, 21:10 | #5 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
я -
Помогите, пожалуйста, разобраться!.. |
02.12.2008, 17:19 | #6 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
Как сложить два списка???
|
02.12.2008, 17:27 | #7 |
Форумчанин
Регистрация: 31.10.2008
Сообщений: 500
|
в последнем элементе ссылкой на следующий элемент должна быть ссылка на первый элемент второго списка.
Skype : UASm1Le.
|
03.12.2008, 18:27 | #8 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
С++ :-(
Индексирование почти написала, кто-нибудь может привести пример объединения(складывания) двух списков? Ну не получается...
|
03.12.2008, 18:36 | #9 |
Форумчанин
Регистрация: 31.10.2008
Сообщений: 500
|
Вот сюда в последнем элементе списка 1 запиши ссылку на 1 элемент списка 2 !!!
Skype : UASm1Le.
|
04.12.2008, 13:57 | #10 |
Пользователь
Регистрация: 30.11.2008
Сообщений: 11
|
Спасибо, Sm1le!
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перегрузка операций 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 |