Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
L3xx__
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 17
#1

Создать на базе класса с реализацией очереди клас потомок — кольцевая очередь - C++

15.08.2014, 00:33. Просмотров 505. Ответов 3
Метки нет (Все метки)

Доброго времени суток. Я хотел создать на базе класса с реализацией очереди клас потомок - кольцевая очередь.
Исходник:
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
 
class Queue{
protected:
    int *Wait;
    int MaxQueueLen;
    int QueueLen;
public:
    Queue(int m);
    ~Queue();
    void Add(int c);
    int Extract();
    void Clear();
    bool IsEmpty();
    bool IsFull();
    int GetCount();
    void Show();
};
 
void Queue :: Show(){
    cout << "\n-------------------------------------------------\n";
    for(int i=0; i < QueueLen; i++)
        cout << Wait[i] << " ";
    cout << "\n-------------------------------------------------\n";
}
 
Queue :: ~Queue(){
    delete [] Wait;
}
 
Queue :: Queue(int m){
    MaxQueueLen = m;
    Wait = new int [MaxQueueLen];
    QueueLen = 0;
}
 
void Queue :: Clear (){
    QueueLen = 0;
}
 
bool Queue :: IsEmpty(){
    return QueueLen == 0;
}
 
bool Queue :: IsFull(){
    return QueueLen == MaxQueueLen;
}
 
int Queue :: GetCount(){
    return QueueLen;
}
 
void Queue :: Add(int c){
    if(!IsFull()){
        Wait[QueueLen++] = c;
    }
}
 
int Queue :: Extract(){
    if(!IsEmpty()){
        int temp;
        temp = Wait[0];
        for(int i = 0; i < QueueLen - 1; i++)
            Wait[i] = Wait[i + 1];
        QueueLen--;
        return temp;
    }else{
        cout << "\nQueue is empty.";
        return -1;
    } 
}
 
class QueueRound : public Queue
{
public:
    QueueRound(int m){
        Queue(m);
    }
    ~QueueRound(){
        ~Queue();
    }
    int Extract(){
        if(!IsEmpty()){
            int temp = Wait[0];
            for (int i = 0; i < QueueLen - 1; ++i)
            {
                Wait[i] = Wait[i + 1];
            }
            Wait[QueueLen - 1] = temp;
 
            return temp; 
        }else{
            cout << "Queue is empty";
            return -1;
        }
    }
};
 
int main(){
    srand(time(NULL));
 
    Queue QU(25);
 
    for (int i = 0; i < 10; ++i)
    {
        QU.Add(rand() % 50);
    }
 
    QU.Show();
    QU.Extract();
    QU.Show();
 
    cout << "\nQueueRound\n---------------------------------------------------\n";
 
    QueueRound QR(15);
    for (int i = 0; i < 10; ++i)
    {
        QR.Add(rand() % 50);
    }
 
    QR.Show();
    QR.Extract();
    QR.Show();
 
    return 0;
}
Компилятор gcc. Выдает ошибку:
Кликните здесь для просмотра всего текста
gcc ./queue.cpp -o ./queue
./queue.cpp: In constructor ‘QueueRound::QueueRound(int)’:
./queue.cpp:80:19: error: no matching function for call to ‘Queue::Queue()’
QueueRound(int m){
^
./queue.cpp:80:19: note: candidates are:
./queue.cpp:35:1: note: Queue::Queue(int)
Queue :: Queue(int m){
^
./queue.cpp:35:1: note: candidate expects 1 argument, 0 provided
./queue.cpp:7:7: note: Queue::Queue(const Queue&)
class Queue{
^
./queue.cpp:7:7: note: candidate expects 1 argument, 0 provided
./queue.cpp:81:10: error: declaration of ‘Queue m’ shadows a parameter
Queue(m);
^
./queue.cpp:81:10: error: no matching function for call to ‘Queue::Queue()’
./queue.cpp:81:10: note: candidates are:
./queue.cpp:35:1: note: Queue::Queue(int)
Queue :: Queue(int m){
^
./queue.cpp:35:1: note: candidate expects 1 argument, 0 provided
./queue.cpp:7:7: note: Queue::Queue(const Queue&)
class Queue{
^
./queue.cpp:7:7: note: candidate expects 1 argument, 0 provided
./queue.cpp: In destructor ‘QueueRound::~QueueRound()’:
./queue.cpp:84:10: error: no matching function for call to ‘Queue::Queue()’
~Queue();
^
./queue.cpp:84:10: note: candidates are:
./queue.cpp:35:1: note: Queue::Queue(int)
Queue :: Queue(int m){
^
./queue.cpp:35:1: note: candidate expects 1 argument, 0 provided
./queue.cpp:7:7: note: Queue::Queue(const Queue&)
class Queue{
^
./queue.cpp:7:7: note: candidate expects 1 argument, 0 provided

Ошибка где-то в конструкторе(как я понимаю, компилятор не может разпознать аргумент). Но почему она возникает и как ее устранить, я не могу понять. Подскажите пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 00:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создать на базе класса с реализацией очереди клас потомок — кольцевая очередь (C++):

Создать шаблонную очередь и инстанцировать её для своего класса, представляющего строку на базе vector<char> - C++
Была задача создать шаблонную очередь (я это сделал) и инстанцировать её для своего класса, представляющего строку, изготовленную из...

Очередь С++ Проблема с удалением элементов класса очереди - C++
Разбираюсь с очередью. Не могу понять, где совершил ошибку: при компиляции компилятор ругается на необработанное исключение при удалении...

Кольцевая однонаправленная очередь - C++
Здравствуйте! Нужно реализовать кольцевую однонаправленную очередь. С простой очередью разобрался, но точную информацию про &quot;кольцевую...

Создать очередь. Добавить элемент в очередь. Удалить элемент из очереди - C++
Нужно создать очередь. Добавить элемент в очередь. Удалить элемент из очереди. Вот моё &quot;творение&quot;. int main() { int...

На основе созданного класса OPERATION, создать класс-потомок OP_SUMMATOR, который производит сложение двух полей - C++
Я создал класс OPERATION, который является абстрактной операцией над двумя числами типа int. Непосредственно сама операция ...

Очередь: Создать две новые очереди в которых будут находиться отдельно положительные и отрицательные числа - C++
Задана очередь элементов, содержащий положительные и отрицательное числа.Создать две новые очереди в которых будут находиться отдельно...

3
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
15.08.2014, 00:38 #2
C++
1
2
QueueRound(int m) : Queue(m) { }
~QueueRound() { }
0
L3xx__
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 17
15.08.2014, 00:44  [ТС] #3
Вопрос относительно деструктора.
C++
1
~QueueRound() { }
Он вызывает деструктор отцовского класса, а тот в свою очередь высвобождает память?
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
15.08.2014, 00:56 #4
Цитата Сообщение от L3xx__ Посмотреть сообщение
деструктор отцовского класса
Для описания иерархии в C++ приняты термины: "базовый класс" и "производный класс".
Деструктор класса всегда неявно вызывает деструкторы базовых классов, а так же членов класса. Явный вызов деструкторов требуется в очень редких случаях.
В данном случае не помешало бы сделать деструктор базового класса виртуальным. Хотя, если не используется полиморфное удаление (delete), то это не обязательно.
А в производном классе можно вообще не реализовывать деструктор вручную, т.к. никаких специфических действий не требуется и подойдет версия, сгенерированная автоматически компилятором.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2014, 00:56
Привет! Вот еще темы с ответами:

Реализовать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL - C++
Создать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL. Написать тестирующую программу,...

Игра "Однорукий бандит". Кольцевая очередь. Двусвязный список - C++
Здраствуйте. Задание: &quot;Создать игру &quot;Однорукий бандит&quot;. При нажатии кнопки Enter происходит &quot;вращение&quot; трех барабанов (количество...

можно ли считать данный код реализацией очереди - C++
можно ли считать данный код реализацией очереди. и если нет, то почему. #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; typedef...

Создать очередь, содержащую любые символы. Удалить из очереди все символы, не являющиеся буквами или цифрами - C++
Используя динамические структуры, реализовать следующие задания. Вспомо*гательные функции должны быть написаны самостоятельно (Встроенную...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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