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

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

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

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

15.08.2014, 00:33. Просмотров 432. Ответов 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

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

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

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

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

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

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

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

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

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

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

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

Создать базовый класс список. Реализовать на базе списка стек и очередь с виртуальными функциями вставки и вытаскивания - C++
Здравствуйте, помогите пожалуйста разобраться что как работает в программе (напишите комментарии). Задание: Создать базовый класс...

На базе класса “дата” создать класс “сообщение” - C++
Подскажите, что изменить, что б в визуале заработал вот задание &quot;&quot;На базе класса “дата” создать класс “сообщение”. Данные: число,...

создать клас HugeInt - C++
Описать класс, реализующий указанный ниже тип данных. Класс должен содержать множество конструкторов для создания объектов определенного...


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.08.2014, 00:56     Создать на базе класса с реализацией очереди клас потомок — кольцевая очередь #4
Цитата Сообщение от L3xx__ Посмотреть сообщение
деструктор отцовского класса
Для описания иерархии в C++ приняты термины: "базовый класс" и "производный класс".
Деструктор класса всегда неявно вызывает деструкторы базовых классов, а так же членов класса. Явный вызов деструкторов требуется в очень редких случаях.
В данном случае не помешало бы сделать деструктор базового класса виртуальным. Хотя, если не используется полиморфное удаление (delete), то это не обязательно.
А в производном классе можно вообще не реализовывать деструктор вручную, т.к. никаких специфических действий не требуется и подойдет версия, сгенерированная автоматически компилятором.
Yandex
Объявления
15.08.2014, 00:56     Создать на базе класса с реализацией очереди клас потомок — кольцевая очередь
Ответ Создать тему
Опции темы

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