Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lenochk@
25 / 0 / 1
Регистрация: 13.10.2011
Сообщений: 11
#1

Очередь из разнитипных элементов - C++

02.11.2011, 17:00. Просмотров 361. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста, задаче не хочет выводить метод speek(). Ошибка у меня в int main()после того как я объявила указатель на очередь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
  Создать очередь из разнотипных элементов-животных, образованных от одного базового класса  Animal. 
  Испольpовать замещение метода  Speek() в каждом подклассе. Продемонстрировать работу очереди в main.
*/
#include<iostream>
#include<math.h>
using namespace std;
 
class Animal
{   protected:  int age;
public: virtual void Speek () {cout<<"0";};
            int GetAge (void){return age;};
            void SetAge (int a) {age=a;}; 
};
class Dog:public Animal { public: void Speek() {cout<<"Gav-Gav"<<endl;};};
class Cat:public Animal { public: void Speek() {cout<<"May"<<endl;};};
class Syslik:public Animal { public: void Speek() {cout<<"Sam golos!"<<endl;};};
 
 
class AnimalQueue 
{private: int rloc;  int sloc; 
          Animal *q ; 
          unsigned int size;
public: AnimalQueue(int s){size = s; q = new *Animal[size]; if (!q){cout<<"no free memory"<<endl; return;}; rloc = sloc = 0;}; //конструктор
        void qput (Animal x)  //постановка в очередь
            { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
              q[sloc++]=x; 
              return;
            };
        //Animal qget (void)  //выдача элемента
        //  { if (sloc == rloc) {Animal m; m.SetAge(-1); cout<<"ochered pusta"<<endl; return m;}
        //    return q[rloc++];
        //  };
        ~AnimalQueue(){delete []q;};
};
 
 
int   main()
{  //Animal *p;
    Dog Reks, Djessi;
    Cat Mursik, Myrka;
    Syslik Fenya, AntonDm;
 
    Reks.SetAge(2);
    Djessi.SetAge(5);
    Mursik.SetAge(1);
    Myrka.SetAge(3);
    Fenya.SetAge(5);
    AntonDm.SetAge(4);
    //cout<<"  "<<Reks.GetAge()<<endl;
    //p = &Reks;
    //p -> Speek();
    //p = &Mursik;
    //p -> Speek();
    //p = &Fenya;
    //p -> Speek();
 
    AnimalQueue *A; // объявили указатель на очередь 
    int n; n=10;
    A = new AnimalQueue(n);
    if (!A){cout<<"memory pusta"<<endl; return 1;}else
    {   A->qput(Reks);
        A->qput(Djessi);
        A->qput(Mursik);
        A->qput(Myrka);
        A->qput(Fenya);
        A->qput(AntonDm);
    };
     for (int i=0; i<n; i++)
    {   if (A[i].GetAge()!=-1){
        A[i]->Speek();
        cout<<x.GetAge()<<endl;     
     };};
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 17:00     Очередь из разнитипных элементов
Посмотрите здесь:

Очередь из разнородных элементов C++
C++ Очередь С++ Проблема с удалением элементов класса очереди
C++ Добавление элементов в очередь
Составьте программу, которая создает очередь из произвольного количества элементов C++
C++ Составьте программу, которая создает очередь из произвольного количества элементов
C++ Реализовать очередь с операциями вставки и удаления элементов
C++ Дана очередь на n элементов - вывести в порядке возрастание элементы, которые кратны 2,3,5
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
02.11.2011, 17:15     Очередь из разнитипных элементов #2
что за ошибка? у меня выдает совершенно другие строки.
и откуда такая дурная манера писать операторы в строчку. это мало того, что не читаемо, так еще и ошибки от компилятора отыскивать сложнее.
и зачем после каждой закрывающей фигурной скобки точку с запятой ставить?
TwiX
60 / 60 / 1
Регистрация: 27.10.2011
Сообщений: 189
02.11.2011, 17:46     Очередь из разнитипных элементов #3
C++
1
  A[i]->Speek();
Что???? У вас указатель А - это не указатель на массив животных.
Самое просто - перенсти Animal *q в паблик. Тогда
C++
1
  A[i]->Speek();
заменится на
C++
1
  A->q[i].Speek();
Lenochk@
25 / 0 / 1
Регистрация: 13.10.2011
Сообщений: 11
02.11.2011, 18:32  [ТС]     Очередь из разнитипных элементов #4
Упс. Я там не тот код малость выложила... Тот я пробовала править...
Код вот этот.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
  Создать очередь из разнотипных элементов-животных, образованных от одного базового класса  Animal. 
  Испольpовать замещение метода  Speek() в каждом подклассе. Продемонстрировать работу очереди в main.
*/
#include<iostream>
using namespace std;
 
class Animal
{   protected:  int age;
public: virtual void Speek () {cout<<"0";};
            int GetAge (void){return age;};
            void SetAge (int a) {age=a;}; 
};
class Dog:public Animal { public: void Speek() {cout<<"Gav-Gav"<<endl;};};
class Cat:public Animal { public: void Speek() {cout<<"May"<<endl;};};
class Syslik:public Animal { public: void Speek() {cout<<"Sam golos!"<<endl;};};
 
class AnimalQueue 
{public:  int rloc;  
          int sloc; 
          Animal *q ; 
          unsigned int size;
public: AnimalQueue(int s){size = s; q = new Animal[size]; if (!q){cout<<"no free memory"<<endl; return;}; rloc = sloc = 0;}; //конструктор
        void qput (Animal x)  //постановка в очередь
            { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
              q[sloc++]=x; 
              return;
            };
        Animal qget (void)  //выдача элемента
            { if (sloc == rloc) {Animal m; m.SetAge(-1); cout<<"ochered pusta"<<endl; return m;}
              return q[rloc++];
            };
        ~AnimalQueue() {delete []q;};
};
 
int   main()
{  //Animal *p;
    Dog Reks, Djessi;
    Cat Mursik, Myrka;
    Syslik Fenya, Anton;
    
    Reks.SetAge(2);
    Djessi.SetAge(5);
    Mursik.SetAge(1);
    Myrka.SetAge(3);
    Fenya.SetAge(5);
    Anton.SetAge(4);
    //p = &Reks;
    //p -> Speek();
    //p = &Mursik;
    //p -> Speek();
    //p = &Fenya;
    //p -> Speek();
 
    AnimalQueue *A; // объявили указатель на очередь 
    int n; n=10;
    A = new AnimalQueue(n);
    if (!A){cout<<"memory pusta"<<endl; return 1;}else
    {   A->qput(Reks);
        A->qput(Djessi);
        A->qput(Mursik);
        A->qput(Myrka);
        A->qput(Fenya);
        A->qput(Anton);
    };
    Animal x;
    for (int i=0; i<n; i++)
    {   x=A->qget();
        if (x.GetAge()!=-1){
            x.Speek();
            cout<<x.GetAge()<<endl;     
        };
    };
 
return 0;
}
TwiX
60 / 60 / 1
Регистрация: 27.10.2011
Сообщений: 189
02.11.2011, 18:50     Очередь из разнитипных элементов #5
C++
1
2
3
4
5
void qput (Animal x)  //постановка в очередь
                        { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
                          q[sloc++]=x;
                          return;
                        };
Функция на входе все объекты переделывает в класс Animal. Нужно указатели использовать.
Lenochk@
25 / 0 / 1
Регистрация: 13.10.2011
Сообщений: 11
02.11.2011, 18:57  [ТС]     Очередь из разнитипных элементов #6
я не знаю как сделать...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 22:04     Очередь из разнитипных элементов
Еще ссылки по теме:

C++ Реализовать добавление элементов в очередь
C++ Составьте программу, которая создает очередь из произвольного количества элементов.
Составить программу, которая создает очередь из произвольного количества элементов C++
Изменить удаление и добавление элементов в очередь по правилу FIFO. C++
C++ Создать очередь, написать функции для добавления/удаления элементов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TwiX
60 / 60 / 1
Регистрация: 27.10.2011
Сообщений: 189
02.11.2011, 22:04     Очередь из разнитипных элементов #7
You are welcome...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include<iostream>
using namespace std;
 
class Animal
{       protected:  int age;
public: virtual void Speek () {cout<<"0";};
                        int GetAge (void){return age;};
                        void SetAge (int a) {age=a;}; 
};
class Dog:public Animal { public: void Speek() {cout<<"Gav-Gav"<<endl;};};
class Cat:public Animal { public: void Speek() {cout<<"May"<<endl;};};
class Syslik:public Animal { public: void Speek() {cout<<"Sam golos!"<<endl;};};
 
class AnimalQueue
{public:  int rloc;  
                  int sloc;
                  Animal **q ;
                  unsigned int size;
public: AnimalQueue(int s){size = s; q = new Animal*[size]; if (!q){cout<<"no free memory"<<endl; return;}; rloc = sloc = 0;}; //конструктор
                void qput (Animal *x)  //постановка в очередь
                        { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
                          q[sloc++]=x;
                          return;
                        };
                Animal* qget (void)  //выдача элемента
                        { if (sloc == rloc) {cout<<"ochered pusta"<<endl; return 0;}
                          return q[rloc++];
                        };
                ~AnimalQueue() {delete []q;};
};
 
int   main()
{  //Animal *p;
        Dog Reks, Djessi;
        Cat Mursik, Myrka;
        Syslik Fenya, Anton;
        
        Reks.SetAge(2);
        Djessi.SetAge(5);
        Mursik.SetAge(1);
        Myrka.SetAge(3);
        Fenya.SetAge(5);
        Anton.SetAge(4);
        Anton.Speek();
        //p = &Reks;
        //p -> Speek();
        //p = &Mursik;
        //p -> Speek();
        //p = &Fenya;
        //p -> Speek();
 
        AnimalQueue *A; // объявили указатель на очередь 
        int n; n=10;
        A = new AnimalQueue(n);
        if (!A){cout<<"memory pusta"<<endl; return 1;}else
        {       A->qput(&Reks);
                A->qput(&Djessi);
                A->qput(&Mursik);
                A->qput(&Myrka);
                A->qput(&Fenya);
                A->qput(&Anton);
        };
        Animal *x;
        for (int i=0; i<n; i++)
        {   x=A->qget();
            if (!x)
            {
                continue;
            }
                if (x->GetAge()!=-1){
                        x->Speek();
                        cout<<x->GetAge()<<endl;
                };
        };
return 0;
}
Только по-хорошему нужно объекты динамически создавать
Yandex
Объявления
02.11.2011, 22:04     Очередь из разнитипных элементов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru