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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2010, 15:52   #1
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию Наследование класса "Двунаправленный список"

Добрый день, уважаемые члены форума... есть задание: создать базовый класс и реализовать в нем методы создания списка, вставка и удаление объекта из любой заданной позиции, очистка списка...от него создать класс потомок, в котором написать функцию сортировки, изменения порядка следования отрицательных элементов на обратный, изменения порядка следования положительных элементов на обратный...базовый класс я написал, даже попробовал сделать наследование, но не понятно, как можно использовать прописанный в базовом классе список в потомке, можно ли унаследовать и использовать объекты и поля protected, объявленные в базовом классе в потомке...

Если кому не трудно, напишите пожалуйста одну функцию, реализованную в классе-потомке, чтобы я смог понять дальнейший принцип работы...ведь тем, кто знает, это не составит особого труда, а мне очень сильно поможет...))) без этого остальные лабы я просто не сделаю...)) Заранее огромное спасибо..))

Код:
#include <iostream>
#include <conio.h>
using namespace std;

class List
{
protected:
	int a;
	List *next;
	List *prev;
public:
	List () {a=0;}
	void Postroenie(int v);
	void Vivod ();
	void NewEl (int v, int f);
	void Del (int v);
	void DelSp ();

}*start, *last, *p, *pl;

void List::Postroenie(int v)
{
 if (start==NULL ) {
  start=new List;
  start->a=v;
  start->prev=NULL;
  start->next=NULL;
  last=start;
 }
 else{
  p=new List;
  p->a=v;
  p->next=NULL;
  p->prev=last;
  last->next=p;
  last=p;
 }
}

void List::NewEl(int v, int f)
{
	p=start;
	do { p=p->next;
	v--;
	} while (v!=1);

		List *q;
		q=new List;
		q->a=f;
		q->next=(p->prev)->next;
		q->prev=p->prev;
		(p->prev)->next=q;
		p->prev=q;
	}

void List::Del(int v)
{
	p=start;
	do { p=p->next;
	v--;
	} while (v!=1);

  if (p->next!=NULL)
    { 
		(p->next)->prev = p->prev;
      (p->prev)->next = p->next; delete p;
  }
  else
    { 
		(p->prev)->next = NULL; last = last->prev; delete p;}
}


void List::DelSp()
{
	List *q,*q1;
  q  = start; q1 = (*q).next;
  while  (q1!=NULL)
  {
    q = q1; q1 = q1->next; delete q;
  }
  delete start; start = last = NULL;
}


void List::Vivod()
{
    p=start;
	cout<<"Список: ";
	do {
	cout<<" "<<p->a;
	p=p->next;
	} while (p!=0);
  cout<<endl;

}
		
class Potomok: protected List//-----------------> НАСЛЕДОВАНИЕ
{
public:
	void Sort ();
	void SortOtr ();
	void SortPol ();
}*nsp, *ksp;



void main ()
{
	
	setlocale (0,"");
	cout<<"1 - Создание списка\n";
    cout<<"2 - Просмотр списка\n";
    cout<<"3 - Добавление нового элемента\n";
    cout<<"4 - Удаление определенного элемента\n";
    cout<<"5 - Сортировка списка\n";
    cout<<"6 - Обратный порядок отрицательных членов\n";
    cout<<"7 - Обратный порядок положительных членов\n";
    cout<<"8 - Удаление списка\n";
    cout<<"9 - Выход\n\n";
	
	int n, count=0;
	int poz, punkt;
	List A;
	
	do{
	cout<<"\nВыберите необходимый пункт меню\n";
	cin>>punkt;
	switch (punkt){
		case 1: cout<<"Введите значения элементов\n";
	            do {
                cin>>n;
	            A.Postroenie(n);
	            ++count;
	            } while (n!=0);
				break;

		case 2: A.Vivod();
			    break;
		
		case 3: do {
	            cout<<"\nВведите позицию вхождения нового элемента\n";
	            cin>>poz;
	            } while (poz>count);
	            cout<<"\nВведите новый элемент\n";
	            cin>>n;
	            A.NewEl(poz,n);
				break;

		case 4: do{
	            cout<<"\nВыберети позицию удаляемого объекта\n";
	            cin>>poz;
	            } while (poz>count);
                A.Del(poz);
				break;

		case 8: A.DelSp();
			    break;

		case 9: cout<<"Выход\n";
			break;
		default: cout<<"Не верно введен номер пункта\n";
	}}while (punkt!=9);
	
	getch();
}
JeyKip вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Создание класса "Трехмерный вектор" steel_may Помощь студентам 1 09.05.2009 12:29
Конструкторы класса и двунаправленный список (*_*) Общие вопросы C/C++ 2 29.04.2009 18:17
Delphi. Создание нового класса, его "предков". Krechet Помощь студентам 0 26.04.2009 15:52