Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2008, 21:41   #11
_alexey_
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 13
Плохо

Цитата:
Цитата:Сообщение от Nastja
Spisok *next; //Указатель на следующий узел

Вот сюда в последнем элементе списка 1 запиши ссылку на 1 элемент списка 2 !!!
ага и получать креши при обрашении к этим элементам, если какой-то из этих уничтожится до этого обращения.
_alexey_ вне форума Ответить с цитированием
Старый 04.12.2008, 22:14   #12
Nastja
Пользователь
 
Регистрация: 30.11.2008
Сообщений: 11
По умолчанию

_alexey_ ! Вы не могли бы мне помочь?
Nastja вне форума Ответить с цитированием
Старый 05.12.2008, 10:41   #13
_alexey_
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 13
По умолчанию

примерно так:
Код:
Atd& Atd::operator += (Atd& rhs) {
	Spisok* itr = rhs.begin;
	while(itr) {
		end->next = new Spisok;
		end = end->next;
		end->next = 0;
		end->simv = itr.simv;
		itr = itr.next;
	}
	return *this;
}
Atd Atd::operator + (Atd& rhs) const {
	Atd nrv;
	nrv = *this;
	nrv += rhs;
	return nrv;
}

Последний раз редактировалось _alexey_; 05.12.2008 в 11:04.
_alexey_ вне форума Ответить с цитированием
Старый 09.12.2008, 20:02   #14
Nastja
Пользователь
 
Регистрация: 30.11.2008
Сообщений: 11
По умолчанию

Благодарю за ответ!
Nastja вне форума Ответить с цитированием
Старый 09.12.2008, 20:20   #15
Nastja
Пользователь
 
Регистрация: 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 ();
}
Nastja вне форума Ответить с цитированием
Старый 02.07.2010, 14:09   #16
Jeki91
Новичок
Джуниор
 
Регистрация: 02.07.2010
Сообщений: 1
По умолчанию

Всем привет!!!Помогите пожалуста с прогой аналогично преведущей...очень время поджимает, а я так и не могу разобраться!Вот задание:

АТД  однонаправленный список с элементами типа char. Дополнительно перегружать следующие операции:
+ - Добавить элемент в начало (char + list);
- - Удалить элемент сначала (типа - list);
= = - Проверка на равенство.

БУду очень благодарен! =)
Jeki91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операций 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