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

Перегрузка присваивания для стека - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу на языке Си в которой http://www.cyberforum.ru/cpp-beginners/thread769135.html
1. Описать логическую функцию, которая возвращает значение true, если между буквами ‘a’ и ‘z’ нет иных символов, кроме строчных латинских букв, и значение false иначе. помогите пожалуйста, на экзамен надо:)
C++ Игра "Жизнь" и торообразный массив Подскажите, как можно реализовать торообразный (круговой) массив для игры "Жизнь". есть только примитивный алгоритм, без учета перехода границ: проверка клетки: if(universe) count++; if(universe) count++; if(universe) count++; ifuniverse) count++; if(universe) count++; http://www.cyberforum.ru/cpp-beginners/thread769119.html
Программа запрашивает список чисел у пользователя... C++
Программа запрашивает список чисел у пользователя. Если пользователь вводит некорректное значение - программа спрашивает завершить ввод или исправить ошибку и продолжить. Если пользователь выбирает завершить ввод, программа выводит на экран все простые числа из списка введенных чисел. Нужна помощь в написании..
Помогите please cоставить программу, в которой описывается структура из полей: Название товара, Цена товара, Процентная ставка кредита. C++
Помогите please cоставить программу, в которой описывается структура из полей: Название товара, Цена товара, Процентная ставка кредита. Организовать ввод двух структурных переменных, вывод каждой структуры на экран и вывести на экран названия и цены товаров, для которых процентная ставка кредита меньше заданной (если таких товаров нет, вывести сообщение об этом).
C++ как задать значение статическому элементу класса http://www.cyberforum.ru/cpp-beginners/thread769108.html
В классе есть статический Private элемент, мне нужно создать статическую функцию которая будет перезаписывать значение этого элемента. Вот код который не работает. #ifndef SAVINGSACCOUNT_H #define SAVINGSACCOUNT_H class sav { public: sav(int); void CalculateMounthlyInterest(); static void ModifyInterestRate(int);
C++ Задача( составить программу, которая определяет верно ли что в заданном числе все цифры стоят по возрастанию) помогите Как составить программу которая определяет верно ли, что в заданном числе все цифры стоят по возрастанию? подробнее

Показать сообщение отдельно
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
22.01.2013, 21:36     Перегрузка присваивания для стека
Код конструктора копирования и оператора присваивания практически идентичен.
Сделайте метод (например, copyFrom), который вы будете вызывать из оператора присваивания и конструктора копирования.

Цитата Сообщение от 123Unknown Посмотреть сообщение
внутри перегрузки =, нужно явно вызывать деструктор, чтобы сделать пустым s2?(ведь он может остаться висеть в памяти, или это не так ?)
Деструктор вызывать не надо. )
Надо сделать отдельный метод (пусть будет clear), который будет очищать стек, его и вызывать в операторе присваивания и в деструкторе.

Кликните здесь для просмотра всего текста
Пример.
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
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iomanip>
#include <stdexcept>
 
template <class T>
class Stack {
 public:
  Stack() : size(0), top(0) {}
  explicit Stack(const T &topValue) : size(0), top(0) {
    push(topValue);
  }
  Stack(const Stack &other) : size(0), top(0) {
    copyFrom(other);
  }
  virtual ~Stack() {
    clear();
  }
  void push(const T &value) {
    StackNode *node = new StackNode(top, value);
    top = node;
    ++size;
  }
  T pop() {
    if (size < 1) {
      throw std::underflow_error("stack underflow");
    }
    T result = top->value;
    StackNode *nextTop = top->next;
    delete top;
    top = nextTop;
    --size;
    return result;
  }
  const T &peek() const {
    if (size < 1) {
      throw std::underflow_error("stack underflow");
    }
    return top->value;
  }
  int getSize() const { return size; }
  bool isEmpty() const { return size == 0; }
  void clear() {
    while (!isEmpty()) {
      pop();
    }
  }
  void copyFrom(const Stack &other) {
    if (&other != this) {
      clear();
      StackNode *lastNode = 0;      
      for (StackNode *otherNode = other.top; otherNode != 0; 
        otherNode = otherNode->next, ++size) {
        StackNode *node = new StackNode(0, otherNode->value);
        if (lastNode != 0) {
          lastNode->next = node;
        } else {
          top = node;
        }
        lastNode = node;
      }
    }
  }
  Stack &operator=(const Stack &other) {
    copyFrom(other);
    return *this;
  }
 private:
  struct StackNode {
    StackNode *next;
    T value;
    StackNode(StackNode *next, const T &value) : next(next), value(value) {}
  };
  int size;
  StackNode *top;
};
 
int main(int argc, char **argv) {
  srand(time(0));
 
  Stack<int> a;
  for (int i = 0; i < 10; ++i)
    a.push(i);
 
  Stack<int> b = a;
  while (!b.isEmpty()) {
    std::cout << b.pop() << std::endl;
  }
 
  b = a;
  while (!b.isEmpty()) {
    std::cout << b.pop() << std::endl;
  }
 
  std::cin.get();
  return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru