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

Перегрузка оператора постфиксной инкрементации - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ввод\вывод файла http://www.cyberforum.ru/cpp-beginners/thread1132646.html
Здравствуйте, уважаемые программисты. Есть проблемка: нужно прочитать из файла текст и вывести его на экран. Пробую через символьный массив и через ifstream но хорошего не получается ничего
C++ Не выводит перегрузку оператора сложения Помогите пожалуйста исправить ошибку: не выводит перегрузку оператора сложения как сделать чтобы /*Класс "Многочлен одной переменной". Поля: степень многочлена, массив коэффициентов. Методы: вычисление значения, дифференцирование, перегрузка операций сложения "+" и сравнения на равенство "==" двух многочленов.*/ #include <iostream> #include <ctime> #include <math.h> using namespace std;... http://www.cyberforum.ru/cpp-beginners/thread1132641.html
Написать программу, которая вводимое число преобразует в текст C++
Написать программу, которая по вводимому числу от 1 до 5 (номеру курса) выдает соответствующее сообщение «Привет, k-курсник». Например, если k=1, «Привет, первокурс*ник»; при k=4: «Привет, четверокурсник»
Вычислить сумму и число положительных элементов матрицы, находящихся над главной диагональю C++
Помогите пожалуйста решить, и распишите каждую строку а то будут спрашивать что тут а что там. -Двумерный массив вычислить сумму и число положительных элементов матрицы A, находящихся над главной диагональю.
C++ Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" http://www.cyberforum.ru/cpp-beginners/thread1132626.html
Доброго времени суток. Прошу помочь в решении поставленного передо мной вопроса. Суть: Нужно написать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" (не важно какая это будет кнопка, может быть любая другая). Я написал кое-что, но это работает неправильно - программа основана на цикле While. Первый проход она делает как положено, а вот после...
C++ Раздельная компиляция В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот какие: 1) Если у меня есть класс, который я хочу вынести во внешний фаил, то нужно будет два фаила - .h и .cpp ? И как их подключать к проекту,чтобы компиляция свершилась? И методы класса там же указываются? 2) Внешние функции, как я понимаю, выносятся в фаилы .cpp . Соответственно, тоже не особо... подробнее

Показать сообщение отдельно
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
28.03.2014, 22:56     Перегрузка оператора постфиксной инкрементации
Пытался набросать простенький контейнер с итератором. Вот код:
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
#include <iostream>
 
template<typename Item>
class Vector{
private:
  friend class iterator;
  int max_size;
  int current_size;
 
public:
  Item* data_array;
  class iterator{
  private:
    friend class Vector;
    Item* data_array;
    int current_pos;
    int end_pos;
    
  public:
    iterator(){
      this->data_array = 0;
      this->current_pos = 0;
      this->end_pos = 0;
    }
    
    iterator(const Vector& container){
      this->data_array = container.data_array;
      this->current_pos = 0;
      this->end_pos = container.max_size;
    }
 
    iterator& operator=(const iterator& iter)const{
      this->data_array = iter.data_array;
      this->current_pos = iter.current_pos;
      this->end_pos = iter.end_pos;
    }
    
 
    iterator& operator++(){
      std::cout << "Prefix called\n";
      ++this->current_pos;
      return *this;
    }
 
    iterator operator++(int){
      std::cout << "Postfix called\n";
      iterator temp = *this;
      this->current_pos++;
      return temp;
    }
 
    Item& operator*(){
      return data_array[current_pos];
    }
 
    const Item& operator*()const{
      return  data_array[current_pos];
    }
  };
  
  Vector(int size = 15){
    this->current_size = 0;
    this->max_size = size;
    this->data_array = new Item[max_size];
  }
 
  ~Vector(){
    delete [] this->data_array;
  }
 
  iterator begin(){
    return iterator(*this);
  }
    
  void push_back(Item& data){
    if(this->current_size == this->max_size){
      this->max_size *= 2;
      Item* temp = new Item[this->max_size];
 
      for(int i = 0; i < this->current_size; i++){
    temp[i] = this->data_array[i];
      }
      
      delete []this->data_array;
      this->data_array = temp;
      this->data_array[current_size++] = data;
    }
    else{
      this->data_array[current_size++] = data;
    }
  }
};
 
  int main(){
    
    Vector<int>* v = new Vector<int>();
 
    for(int i = 0; i < 20; i++){
      v->push_back(i);
    }
    
    Vector<int>::iterator it = v->begin();
    
    for(int i = 0; i < 20; ++i){
      std::cout << *(it++) << " ";
    }
  }
Все вроде бы прекрасно работает если я тестирую его вот так:
C++
1
2
3
4
    for(int i = 0; i < 20; ++i){
      std::cout << *it << " ";
      it++;
    }
Вывод программы таков:
0 Postfix called
1 Postfix called
2 Postfix called
3 Postfix called
4 Postfix called
5 Postfix called
6 Postfix called
7 Postfix called
8 Postfix called
9 Postfix called
10 Postfix called
11 Postfix called
12 Postfix called
13 Postfix called
14 Postfix called
15 Postfix called
16 Postfix called
17 Postfix called
18 Postfix called
19 Postfix called
Но если я тестирую таким вот образом:
C++
1
2
3
    for(int i = 0; i < 20; ++i){
      std::cout << *(it++) << " ";
    }
Вывод почему то становится вот таким:
D:\exc>vector.exe
Postfix called
0 Postfix called
1 Postfix called
2 Postfix called
3 Postfix called
4 Postfix called
5 Postfix called
6 Postfix called
7 Postfix called
8 Postfix called
9 Postfix called
10 Postfix called
11 Postfix called
12 Postfix called
13 Postfix called
14 Postfix called
15 Postfix called
16 Postfix called
17 Postfix called
18 Postfix called
19
У кого нибудь есть соображения по этому поводу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru