Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список содержащий тест. Иерархия списков. 
:(
    Опции темы
Atij
Дата 19.5.2008, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



Всем добрый день. Помогите пожалуйста релизовать слдующее:

1 – создать список строк информационная часть элементов кот-го содержит указаетли на начало слов.
2 – вывести его.
3 – удалить.
Вот что получилось по первому и второму пунктам:

Код

#include<fstream.h>

ofstream output("out.txt", ios::out);
ifstream input("input.txt", ios::in);

struct node // структура для списка строк
{
  node  *up;
  node *sled;
};
struct node1 // структура для списка слов
{
  char  elem;
  node1 *next;
};

 class Spisok {
   private:
     node *phead; //указатель на заголовочное звено списка строк
     node1 *phead1; //указатель на заголовочное звено списков слов

   public:

     Spisok() {phead=new(node);} // В куче зарезервируем место для динамического объекта, на который указывает phead:
     ~Spisok() {delete phead; delete phead1;}
     void Construction ();
     void OutList ();
    };

void main ()
{
  clrscr();
  Spisok A;

  A.Construction ();
  output<<"Elements before transformation:"<<endl;
  A.OutList ();
  

}

void Spisok::Construction ()
{
  node *t; // Отведем место для указателей в статической памяти
  node1 *p;
  char  el,slovo;
  char s;
  int i=0;


  t = phead; (*t).sled = NULL; // разбераемся с заголовочным звеном 
  while  (!input.eof()) 
  {

    (*t).sled = new (node); // Резервируем место для нового объекта списка строк
    t = (*t).sled;  //Указатель t содержит адрес   расположения созданного объекта.


    phead1=new (node1); // В куче зарезервируем место для динамического объекта, на который указывает phead1
    (*t).up = phead1; // здесь выдаёт ошибку, а я всеголишь хочу связать информационную часть одного списка с заголовочным звеном создаваевамаего списка
    p=phead1;

    (*p).next=NULL;

        while (s!='\n')
        {
        (*p).next = new (node1);
        p = (*p).next; (*p).elem = el; (*p).next = NULL;
            while (s!=' '||s!='\n')
            {
            s=input.get();
            slovo[i]=s; // ещё вот здесь ругается
            i++;
            }
        el=slovo;
        i=0;
        }
    (*t).sled=NULL;
  }

}

void Spisok::OutList ()

{
  node *t;
  node1 *p;

  t = phead; t = (*t).sled; t = (*t).sled;

for ((*t).sled;t!=NULL;t = (*t).sled)
{
p=(*t).up; // и здесь =( говорит что не могу присваивать элементы типа node типу node1, как этого избежать не понятно, пожалуйста помогите.
 p=(*p).next; p=(*p).next;
    for ((*p).next;p!=NULL;p = (*p).next)
    output<<(*p).elem <<" ";
}

}

Помогите пожалуйста кто чем сможет.
PM MAIL   Вверх
mes
Дата 19.5.2008, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Atij @  19.5.2008,  08:32 Найти цитируемый пост)
p=(*t).up; // и здесь =( говорит что не могу присваивать элементы типа node типу node1, как этого избежать не понятно, пожалуйста помогите.

присваивать можно только объекты которые можно привести к одному типу.
Цитата(Atij @  19.5.2008,  08:32 Найти цитируемый пост)
struct node // структура для списка строк
struct node 
{
  node  *up;
  node *sled;
};
struct node1 // структура для списка слов
{
  char  elem;
  node1 *next;
};

node  и  node1 этому условию не удовлетворяют.. (с node1 - явно перемудрено)
Цитата(Atij @  19.5.2008,  08:32 Найти цитируемый пост)
    (*t).up = phead1; // здесь выдаёт ошибку,

тоже самое

Цитата(Atij @  19.5.2008,  08:32 Найти цитируемый пост)
slovo[i]=s; // ещё вот здесь ругается

Цитата(Atij @  19.5.2008,  08:32 Найти цитируемый пост)
  char  el,slovo;

тип slovo не массив




--------------------
PM MAIL WWW   Вверх
Atij
Дата 19.5.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2008

Репутация: нет
Всего: нет



со структурами разобрался, а вот с char` ами пока не очень. 
Если объявляю как массив slovo, просит объявить как массив el, если объявляю как массив el, ругается в этой строке:
Код

(*p).elem = el;

PM MAIL   Вверх
mes
Дата 20.5.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Atij @  19.5.2008,  18:16 Найти цитируемый пост)
если объявляю как массив el, ругается в этой строке:

так у тебя  elem типа char, а не char*. 
для начала разберись кто какого типа должен быть и все станет на места.



--------------------
PM MAIL WWW   Вверх
flyleaf
Дата 6.4.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Помогите плиз! Ести иерархия класов, нужно запихнуть все в список. ну и естественно потом вывести на екран и очистить спиок.
со списками у меня все сложно( 
вот то что есть пока:
Код

#include <iostream.h>
const int len=80;
class persona
{
private:
char name[len];
unsigned long num;
public:
persona();
~persona();
void getdata()
{
cout<< "\n Vvedit fio: \n";
cin >> name;
cout << "\n Vvedit nomer: \n";
cin >> num;
}
virtual void putdata() const
{
cout << "\n fio: " << name;
cout<< "\n Number: "<<num;
}
};
persona::persona()
{
cout<<"element was created ";
}  ;
persona::~persona()
{
cout<<"element destroy!\n" ;
};

class injener: public persona
{
private:
int staj;
public:
void getdata ()
{
persona::getdata();
cout<< "\n Vvedit staj: \n";
cin >> staj;
}
void putdata() const
{
persona::putdata();
cout << "\n staj: " << staj;
}
};


class robitnuk: public persona
{
private:
int rozr9d;
public:
void getdata ()
{
persona::getdata();
cout << "\n Vvedit rozr9d robitnuka : \n";
cin >> rozr9d;
}
void putdata() const
{
persona::putdata();
cout<< "\n rozr9d: "<<rozr9d;
}
};

class slujb: public robitnuk
{
private:
char rang[len];
public:
void getdata ()
{
persona::getdata();
cout<< "\n Vvedit rang: \n";
cin >> rang;
}
void putdata() const
{
persona::putdata();
cout << "\n rang: " << rang;
}
};


struct Element
{
persona data;
Element *Next;
};
class List
{
Element *Head;
Element *Tail;
int Count;
public:
List();
~List();
void Add(persona data);
void Del();
void DelAll();
void Print();
int GetCount();
};
List::List()
{
Head=Tail=NULL;
Count=0;
};
List::~List()
{
DelAll();
};
int List::GetCount()
{
return Count;
};
void List::Add(persona data)
{

Element *temp=new Element;
temp->data=data;
temp->Next=NULL;
if(Head!=NULL) {
Tail->Next=temp;
Tail=temp;
}
else {
Head=Tail=temp;
}
};
void List::Del()
{
Element *temp = Head;
Head=Head->Next;
delete temp;
};
void List::DelAll()
{
while(Head !=0)
Del();
};
void List::Print()
{
Element *temp=Head;
while(temp!=0)
{
cout<< temp <<"\n ";
temp=temp->Next;
}
cout<<"\n\n";
};

int main()
{
char a;
List lst;
persona *p;
while (a!='Y')
{
cout<<"Vvestu dani (Y/N)? ";
cin>>a;
slujb s1;
robitnuk r1;
injener i1;
cout<< endl;
cout <<"\n Vvif informatsii pro slujbovts9";
s1.getdata();
cout <<"\n Vvif informatsii pro robitnuka";
r1.getdata();
cout <<"\n Vvif informatsii pro injenera";
i1.getdata();
}

 return(0);

}

на main все и застряло ( с добавлением в список елементов класа и выводом на екран не получается(
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



flyleaf, не хотите std::list использовать?


--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Цитата(zim22 @ 6.4.2009,  11:01)
flyleaf, не хотите std::list использовать?

Та мне любой способ! Просто в университете мы ничего толком не проходим, поетому в списках в С++ я вообще не понимаю пока, не дошла до того материала, а лабу надо здать, поетому и прошу помощи! Может подскажете как с етим std::list управлятся? 
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(flyleaf @  6.4.2009,  11:09 Найти цитируемый пост)
 Может подскажете как с етим std::list управлятся? 

http://www.cplusplus.com/reference/stl/list/
там все операции расписаны для списка.
например push_front() - вставить элемент в начало списка
pop_back() - извлечь из конца.
и т.д. и т.п.


--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



zim22Оу, буду разбираться =) спасибо =)
PM MAIL ICQ   Вверх
flyleaf
Дата 6.4.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



тут надо использовать библиотеку list, на нее вроде не ругается, а когда прописываю
list<persona> pers
оно ругается на list(
PM MAIL ICQ   Вверх
mrbrooks
Дата 6.4.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



flyleaf, телепаты все на обеде. код в студию.
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Цитата(mrbrooks @ 6.4.2009,  14:17)
flyleaf, телепаты все на обеде. код в студию.

На пару сообщений выше код моей программы и вся основа проблемы


Это сообщение отредактировал(а) flyleaf - 6.4.2009, 14:22
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(flyleaf @  6.4.2009,  14:12 Найти цитируемый пост)
оно ругается на list(

как оно ругается? сильно?


--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Цитата(zim22 @ 6.4.2009,  14:28)
Цитата(flyleaf @  6.4.2009,  14:12 Найти цитируемый пост)
оно ругается на list(

как оно ругается? сильно?

как на неопределенную переменную
Undefined symbol 'list'
Dev-C++ ругается на <,>

PM MAIL ICQ   Вверх
mrbrooks
Дата 6.4.2009, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(flyleaf @  6.4.2009,  14:22 Найти цитируемый пост)
На пару сообщений выше код моей программы и вся основа проблемы

жуть. ну попробуем призвать темные силы джедаев.  smile 
пробуй так.
Код

#include <list>
class persona
{
//blablabla
};

std::list<persona> pers;

PM MAIL   Вверх
zim22
Дата 6.4.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



flyleaf, а так пробовали?
Код

#include <list>
...
std::list<int> li;
li.push_back(10);



Это сообщение отредактировал(а) zim22 - 6.4.2009, 14:39


--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



std теперь его не устраивает ((
а можно как то вручную тот список создать без list.h?
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(flyleaf @  6.4.2009,  14:43 Найти цитируемый пост)
 без list.h?

какой list.h???? 
какой у вас компилятор?



--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Цитата(zim22 @ 6.4.2009,  14:52)
Цитата(flyleaf @  6.4.2009,  14:43 Найти цитируемый пост)
 без list.h?

какой list.h???? 
какой у вас компилятор?

пробывала через Turbo C++
там list.h
пробывала через Dev-C++ 
пробывала через C++ Builder
Если подскажете какой то нормальный компилятор, буду очень признательна
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



flyleaf, Microsoft Visual Studio Express Edition 2008 http://www.microsoft.com/express/vc/
или CodeBlocks http://www.codeblocks.org/downloads/5 (выберите codeblocks-8.02mingw-setup.exe)


--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



о, компилирует =))) спасибо! =)) 
теперь попробую реализовать все =)
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



flyleaf, на здоровье ;)


--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



zim22,  Есче один вопрос, немогу найти вывода списка на екран. подскажите плз ету функцию....

PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



flyleaf
Код
#include <algorithm>
#include <iostream>
#include <list>

int main()
{
  std::list<int> li;
  li.push_back(10);
  li.push_back(20);

  std::copy(li.begin(), li.end(), std::ostream_iterator<int>(std::cout, " "));

  // или так:
  for(std::list<int>::iterator it = li.begin(); it != li.end(); ++it)
    std::cout << *it << " ";
}




--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



zim22
Вот что получилось:
Код

#include <iostream>
#include <list>
#include <string>

using namespace std;
const int len=80;
class persona
{
private:
char name[len];
unsigned long num;
public:
void getdata ()
{
cout<< "\n Vvedit fio: \n";
cin >> name;
cout << "\n Vvedit nomer: \n";
cin >> num;
}
virtual void putdata() const
{
cout << "\n fio: " << name;
cout<< "\n Number: "<<num;
}
};


class injener: public persona
{
private:
int staj;
public:
void getdata ()
{
persona::getdata();
cout<< "\n Vvedit staj: \n";
cin >> staj;
}
void putdata() const
{
persona::putdata();
cout << "\n staj: " << staj;
}
};


class robitnuk: public persona
{
private:
int rozr9d;
public:
void getdata ()
{
persona::getdata();
cout << "\n Vvedit rozr9d robitnuka : \n";
cin >> rozr9d;
}
void putdata() const
{
persona::putdata();
cout<< "\n rozr9d: "<<rozr9d;
}
};

class slujb: public robitnuk
{
private:
char rang[len];
public:
void getdata ()
{
persona::getdata();
cout<< "\n Vvedit rang: \n";
cin >> rang;
}
void putdata() const
{
persona::putdata();
cout << "\n rang: " << rang;
}
};


int main()
{
std::list<persona> pers;
slujb s1;
robitnuk r1;
injener i1;
cout<< endl;
cout <<"\n Vvedit informatsii pro slujbovts9";
pers.push_back(s1);
cout <<"\n Vvedit informatsii pro robitnuka";
r1.getdata();
pers.push_back(r1);
cout <<"\n Vvedit informatsii pro injenera";
i1.getdata();
pers.push_back(i1);
for(std::list<persona>::iterator p = pers.begin(); p != pers.end(); ++p)
   std::cout << *p << " ";

 return(0);

}

на выделеное ругается! 
что то типо no match for 'operator<<' in 'std::cout << и т.д'

Это сообщение отредактировал(а) flyleaf - 6.4.2009, 17:45
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Код

#include <iostream>
#include <list>
#include <string>

using namespace std;
const int len=80;
class persona
{
  friend ostream &operator<<(std::ostream &out, const persona&);
private:
char name[len];
unsigned long num;
public:
void getdata ()
{
cout<< "\n Vvedit fio: \n";
cin >> name;
cout << "\n Vvedit nomer: \n";
cin >> num;
}
virtual void putdata() const
{
cout << "\n fio: " << name;
cout<< "\n Number: "<<num;
}
};

ostream &operator<<(std::ostream &out, const persona &pers)
{
  out << "Name: " << pers.name << std::endl;
  out << "Num: " << pers.num << std::endl;
  return out;
}


class injener: public persona
{
private:
int staj;
public:
void getdata ()
{
persona::getdata();
cout<< "\n Vvedit staj: \n";
cin >> staj;
}
void putdata() const
{
persona::putdata();
cout << "\n staj: " << staj;
}
};


class robitnuk: public persona
{
private:
int rozr9d;
public:
void getdata ()
{
persona::getdata();
cout << "\n Vvedit rozr9d robitnuka : \n";
cin >> rozr9d;
}
void putdata() const
{
persona::putdata();
cout<< "\n rozr9d: "<<rozr9d;
}
};

class slujb: public robitnuk
{
private:
char rang[len];
public:
void getdata ()
{
persona::getdata();
cout<< "\n Vvedit rang: \n";
cin >> rang;
}
void putdata() const
{
persona::putdata();
cout << "\n rang: " << rang;
}
};


int main()
{
std::list<persona> pers;
slujb s1;
robitnuk r1;
injener i1;
cout<< endl;
cout <<"\n Vvedit informatsii pro slujbovts9";
pers.push_back(s1);
cout <<"\n Vvedit informatsii pro robitnuka";
r1.getdata();
pers.push_back(r1);
cout <<"\n Vvedit informatsii pro injenera";
i1.getdata();
pers.push_back(i1);
for(std::list<persona>::iterator p = pers.begin(); p != pers.end(); ++p)
   std::cout << *p << " ";

 return(0);

}



--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Извените за кучу моих вопросов... но сама не сделаю =(

Вот обьекты в список загнались 
проблема теперь в том, что загоняются только поля главного класа, а подкласа нет... подскажите как ето исправить... 
Код

#include <iostream> 
#include <list> 


using namespace std; 
const int len=80; 
class persona 

  friend ostream &operator<<(std::ostream &out, const persona&); 
private: 
char name[len]; 
unsigned long num; 
public: 
void getdata () 

cout<< "\n Vvedit fio: \n"; 
cin >> name; 
cout << "\n Vvedit nomer: \n"; 
cin >> num; 

virtual void putdata() const 

cout << "\n fio: " << name; 
cout<< "\n Number: "<<num; 

}; 

ostream &operator<<(std::ostream &out, const persona &pers) 

  out << "Name: " << pers.name << std::endl; 
  out << "Num: " << pers.num << std::endl; 
  return out; 



class injener: public persona 

private: 
int staj; 
public: 
void getdata () 

persona::getdata(); 
cout<< "\n Vvedit staj: \n"; 
cin >> staj; 

void putdata() const 

persona::putdata(); 
cout << "\n staj: " << staj; 

}; 


class robitnuk: public persona 

    public: 
int rozr9d; 
void getdata () 

persona::getdata(); 
cout << "\n Vvedit rozr9d robitnuka : \n"; 
cin >> rozr9d; 

void putdata() const 

persona::putdata(); 
cout<< "\n rozr9d: "<<rozr9d; 

}; 

class slujb: public robitnuk 

    public: 
char rang[len]; 
void getdata () 

persona::getdata(); 
cout<< "\n Vvedit rang: \n"; 
cin >> rang; 

void putdata() const 

persona::putdata(); 
cout << "\n rang: " << rang; 

}; 


int main() 

std::list<persona> pers; 
slujb s1; 
robitnuk r1; 
injener i1; 
cout<< endl; 
cout <<"\n Vvedit informatsii pro slujbovts9"; 
s1.getdata(); 
pers.push_back(s1); 
cout <<"\n Vvedit informatsii pro robitnuka"; 
r1.getdata(); 
pers.push_back(r1); 
cout <<"\n Vvedit informatsii pro injenera"; 
i1.getdata(); 
pers.push_back(i1); 
for(std::list<persona>::iterator p = pers.begin(); p != pers.end(); ++p) 
   std::cout << *p << " "; 

 return(0); 


}


Это сообщение отредактировал(а) flyleaf - 6.4.2009, 18:34
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(flyleaf @  6.4.2009,  18:15 Найти цитируемый пост)
что загоняются только поля главного класа, а подкласа нет... 

где они загоняются. номер строки какой?
отформатируйте код, читать невозможно. хоть отступы сделайте...
форматировать так:
Код

class MyClass {
public:
  MyClass() { }
  int getData() const { }
private:
  int var1;
  double var2;
};




--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Код

#include <iostream>
#include <list>


using namespace std;
const int len=80;
class persona
{
  friend ostream &operator<<(std::ostream &out, const persona&);
    private:
        char name[len];
        unsigned long num;
    public:
        void getdata ()
            {
                cout<< "\n Vvedit fio: \n";
                cin >> name;
                cout << "\n Vvedit nomer: \n";
                cin >> num;
            }
virtual void putdata() const
    {
        cout << "\n fio: " << name;
        cout<< "\n Number: "<<num;
    }
};

ostream &operator<<(std::ostream &out, const persona &pers)
{
    out << "Name: " << pers.name << std::endl;
    out << "Num: " << pers.num << std::endl;
  return out;
}


class injener: public persona
{
    private:
        int staj;
    public:
        void getdata ()
            {
                persona::getdata();
                cout<< "\n Vvedit staj: \n";
                cin >> staj;
            }
            
void putdata() const
{
    persona::putdata();
    cout << "\n staj: " << staj;
}
};


class robitnuk: public persona
{
    public:
        int rozr9d;
    void getdata ()
    {
        persona::getdata();
        cout << "\n Vvedit rozr9d robitnuka : \n";
        cin >> rozr9d;
    }
    void putdata() const
    {
        persona::putdata();
        cout<< "\n rozr9d: "<<rozr9d;
    }
};

class slujb: public robitnuk
{
    public:
        char rang[len];
        void getdata ()
        {   
            persona::getdata();
            cout<< "\n Vvedit rang: \n";
            cin >> rang;
        }
    void putdata() const
    {
        persona::putdata();
        cout << "\n rang: " << rang;
    }
};


int main()
{
std::list<persona> pers;
slujb s1;
robitnuk r1;
injener i1;
cout<< endl;
cout <<"\n Vvedit informatsii pro slujbovts9";
s1.getdata();
pers.push_back(s1);
cout <<"\n Vvedit informatsii pro robitnuka";
r1.getdata();
pers.push_back(r1);
cout <<"\n Vvedit informatsii pro injenera";
i1.getdata();
pers.push_back(i1);
for(std::list<persona>::iterator p = pers.begin(); p != pers.end(); ++p)
   std::cout << *p << " ";

 return(0);


}



Заганяются они в функцие main
PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



У вас был list на объекты базового класса. 
В него вы передавали объекты производных классов. И эти объекты усекались до объекта базового класса.
Чтобы использовать полиморфизм - необходимо было создать список указателей на базовый класс.

Код

#include <iostream>
#include <list>


using namespace std;
const int len=80;
class persona
{
  friend ostream &operator<<(std::ostream &out, const persona&);
    private:
        char name[len];
        unsigned long num;
    public:
        void getdata ()
            {
                cout<< "\n Vvedit fio: \n";
                cin >> name;
                cout << "\n Vvedit nomer: \n";
                cin >> num;
            }
virtual void putdata() const
    {
        cout << "\n fio: " << name;
        cout<< "\n Number: "<<num;
    }
};

ostream &operator<<(std::ostream &out, const persona &pers)
{
    out << "Name: " << pers.name << std::endl;
    out << "Num: " << pers.num << std::endl;
  return out;
}


class injener: public persona
{
    private:
        int staj;
    public:
        void getdata ()
            {
                persona::getdata();
                cout<< "\n Vvedit staj: \n";
                cin >> staj;
            }
            
void putdata() const
{
    persona::putdata();
    cout << "\n staj: " << staj;
}
};


class robitnuk: public persona
{
    public:
        int rozr9d;
    void getdata ()
    {
        persona::getdata();
        cout << "\n Vvedit rozr9d robitnuka : \n";
        cin >> rozr9d;
    }
    void putdata() const
    {
        persona::putdata();
        cout<< "\n rozr9d: "<<rozr9d;
    }
};

class slujb: public robitnuk
{
    public:
        char rang[len];
        void getdata ()
        {   
            persona::getdata();
            cout<< "\n Vvedit rang: \n";
            cin >> rang;
        }
    void putdata() const
    {
        persona::putdata();
        cout << "\n rang: " << rang;
    }
};


int main()
{
  std::list<persona*> pers;
  slujb *s1 = new slujb;
  robitnuk *r1 = new robitnuk;
  injener *i1 = new injener;
  cout<< endl;
  cout <<"\n Vvedit informatsii pro slujbovts9";
  s1->getdata();
  pers.push_back(s1);
  cout <<"\n Vvedit informatsii pro robitnuka";
  r1->getdata();
  pers.push_back(r1);
  cout <<"\n Vvedit informatsii pro injenera";
  i1->getdata();
  pers.push_back(i1);
  for(std::list<persona*>::iterator p = pers.begin(); p != pers.end(); ++p)
     (*p)->putdata();

 return(0);


}


Это сообщение отредактировал(а) zim22 - 6.4.2009, 20:28


--------------------
PM MAIL   Вверх
flyleaf
Дата 6.4.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 40
Регистрация: 6.4.2009

Репутация: нет
Всего: нет



Спасибо вам большое!


PM MAIL ICQ   Вверх
zim22
Дата 6.4.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



flyleaf, на здоровье.


--------------------
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.