В настоящее время работаю над объектно-ориентированным программированием на c ++ и испытываю проблемы с экземпляром, в котором ничего не показано по сравнению с созданным мною методом.
Весь код основан на этом объекте, который я создал из заголовкафайл.
#ifndef DEQUE_H_
#define DEQUE_H_
#include <iostream>
const int CAPACITY = 5;
const int DEFAULT = -1;
class Deque
{
public:
Deque();
int get_size() const;
bool is_empty() const;
bool is_full() const;
int operator[](int i) const;
static Deque insert_tail(int);
private:
int size_;
static int array_[CAPACITY];
};
std::ostream & operator<<(std::ostream &, const Deque &);
#endif
Одна из проблем, с которыми я сталкиваюсь, - это метод insert_tail, который не показывает никаких изменений в моем статическом массиве.В самом файле cpp .. это объявления функций.
#
include <iostream>
#include "Deque.h"
Deque::Deque()
:size_(0)
{
}
int Deque::array_[5] = {};
int Deque::get_size() const
{
return size_;
}
bool Deque::is_full() const
{
if (size_ == 5) return 1;
else return 0;
}
bool Deque::is_empty() const
{
if (size_!= 5) return 1;
else return 0;
}
int Deque::operator[](int i) const
{
int something = array_[i];
return something;
}
Deque Deque::insert_tail(int x)
{
Deque d;
d.size_ += 1;
int size = d.size_;
d.array_[size - 1] = x;
return d;
}
std::ostream & operator<<(std::ostream & cout, const Deque & dq)
{
cout << dq.get_size() << " [ ";
for (int i = 0; i < dq.get_size(); ++i)
{
cout << dq[i] << " ";
}
cout << "]";
return cout;
}
Оператор работает просто отлично.Bool'ы работают просто отлично, а удаление, заголовок и удаление, я сделаю, как только выясню, вставить хвост.Прямо сейчас, это не делает никаких шансов для самого объекта, который я создал в главном.
#include <iostream>
#include "Deque.h"
void print(const Deque & deque)
{
static int i = 1;
std::cout << i << ". " << deque << ", empty: " << deque.is_empty()
<< ", full: " << deque.is_full();
i++;
}
void test_insert_tail(Deque & deque, int x)
{
deque.insert_tail(x);
print(deque); std::cout << "\n";
}
int main()
{
Deque deque;
print(deque);
std::cout << "\n";
test_insert_tail(deque, 2);
return 0;
}
Вывод должен выглядеть следующим образом: 1. 1 [2], пусто: 0, заполнено: 0, но выглядит так: 1. 0 [], пусто: 1, заполнено: 0
Что происходит внутри моего статического метода для обработки всех личных атрибутов, по которым мне не хватает?Что я сделал не так точно?