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

Перегрузка оператора "&" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Символьные массивы http://www.cyberforum.ru/cpp-beginners/thread690213.html
Ребята, я по некоторих причинах пропустил пару по етой теме, и не знаю толком как работать с символьними масивами. Нужно сделать задание для лабараторки: ввести стоку и инвертировать ее(первое слово в конец, второе конец-1...). -Как ето сделать, как вводитсья строка в массив, каждое слово отдельно или считает каждый символ отдельно? Как ето сделать с помощю самых прымытывних команд(типа scanf или...
C++ Переписать код без использования указателей Как эту функцию можно записать используя указателей? char* ptr1=text; char* ptr2; sLen=strlen(str1); while(ptr1){ ptr2=ptr1; ptr1=strstr(ptr1+sLen, str1); } if (ptr2==text){cout<<"neznaydeno";} else{ strcpy(sBuf, ptr2 + strlen(str1)); http://www.cyberforum.ru/cpp-beginners/thread690206.html
Обьясните условие задачи C++
Обьясните пожалуйста что нужно сделать?? Вычислить значение y в зависимости от выбранной функции от (x), аргумент которой определяется с поставленной условия. Возможные значения функции от (x): 2x, x2, х / 3 (в оконном приложении выбор выполнить с помощью компоненты RadioGroup). Предусмотреть вывод сообщений, показывающие, при которой условия и с какой функцией проводились вычисления у.
C++ Все ли элементы последовательности не равны числу X
Требуется написать программу по данному условию: Задана произвольная последовательность, все ли элементы последовательности не равны числу X. ??? программа без массивов. Есть такой код, он по строению верный, но напутаны буквы, и правильность. Может кто нибудь поправить(восстановить) код, чтобы он работал по условию? Очень надо( int main() { int n, x, a, max; cout <<"x"=; cin >> x,...
C++ Создать линейный список целых чисел. Вычислить количество вхождений заданного числа в очереди http://www.cyberforum.ru/cpp-beginners/thread690197.html
Создать линейный список целых чисел. Вычислить количество вхождений заданного числа в очереди
C++ Составить поисковое дерево Короче программа должна из случайно сформированного массива mas1, составить поисковое дерево(то бишь программа должна сделать так чтобы в верху был наименьший элемент далее с ссылкой на соседние элементы вниз по уровням)вот примерно как на рисунке и надо как то вывести это красиво. чтобы было понятно что это дерево. либо вертикально либо горизонтально(когда самый левый это корень дерева) //... подробнее

Показать сообщение отдельно
[O]Clic[K]
1 / 1 / 0
Регистрация: 28.03.2012
Сообщений: 55

Перегрузка оператора "&" - C++

06.11.2012, 18:50. Просмотров 545. Ответов 1
Метки (Все метки)

Нужна помощь!
Нужно перегрузить оператор &, чтобы он складывал исходный список и список, полученный перегрузкой оператора --, который выводит список в обратном порядке
Проект на Visual Studio в аттаче. Вот код:
Spisok.h
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
#pragma once // Защищает от повторой компиляции файлов. Т.е. iostream мы уже в мейне компильнули, тут он возьмется 
             // из main, а не будет собираться снова (очень сильно экономит время компиляции (при больших файлах))
#include <iostream>
 
using namespace std;
 
// Описание структуры 
struct node 
{
    int data;            // Поле с информацией
    struct node* next;   // Указатель на следующую структуру
};
 
// Объявление нашего класса
class CSpisok
{
/* К этим полям мы не имеем прямого доступа вне класса или дружественных функций.
Для того, чтобы получить их, будем пользоваться публичными методами */
private:
    node* head;     // Указатель на голову
    node* tail;     // На хвост
 
/* Публичные поля. Доступ к ним открыт везде */
public:
    /* Конструкторы */
    // По умолчанию + с параметром. Если не будет введена длина, то она будет равна 5
    CSpisok (int size = 5);
    // Конструктор копирования. Новый класс будет точной копией класса, на основе которого мы его создаем
    CSpisok(const CSpisok& input);
 
    /* Деструктор */
    ~CSpisok ();
 
    /* Методы (функции) класса */
    void Show (); // Вывод списка на экран
    // Константый метод получения головы списка
    node* GetHead (void) const
    { return head; }
 
    /* Перегрузка операторов */
    void operator ++ (void);
    void operator -- (void);
};
Spisok.cpp
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
131
132
133
134
#include "Spisok.h"
 
using namespace std;
 
// Конструкторы
CSpisok::CSpisok(int size)
{
    // Заполним список очередью. Ибо такое задание.
    // Список - первым вошел, первым вышел. Стек - первым вошел, последним вышел.
    // Пример: ввели с клавиатуры 1 2 3 4 5. Очередь: 1 2 3 4 5, стек: 5 4 3 2 1
 
    head = NULL;
    node* pointer;
 
    for (int i = 0; i < size; i++)
        if (head == NULL)
        {
            head = new node;
            head->data = rand()%99 + 1;  // Случайное число в диапазоне (от 0 до 99) + 1
            head->next = NULL;
            tail = head;
        }
        else
        {
            pointer = new node;
            pointer->data = rand()%99 + 1;
            tail->next = pointer;
            pointer->next = NULL;
            tail = pointer;
        }
}
CSpisok::CSpisok(const CSpisok& input)
{
    // Тут и далее будем использовать константные методы. Их отличие от простых - на конце у них
    // в прототипе слово const. Почему? Потому что входной параметр - константа, и изменить мы
    // её не можем. Поэтому мы и показываем компилятору, что данный метод не изменяет объект
 
    node* pointer;
    node* in_pointer = input.GetHead();
    head = NULL;
 
    while (in_pointer != NULL)
    {
        if (head == NULL)
        {
            head = new node;
            head->data = in_pointer->data;
            head->next = NULL;
            tail = head;
        }
        else
        {
            pointer = new node;
            pointer->data = in_pointer->data;
            tail->next = pointer;
            pointer->next = NULL;
            tail = pointer;
        }
        in_pointer = in_pointer->next;
    }
}
 
// Деструктор
CSpisok::~CSpisok(void)
{
    // Удаляем наш список из динамической памяти
    node* pointer = head;
    while (pointer != NULL)
    {
        node* _delete = pointer;
        pointer = pointer->next;
        delete _delete;
    }
}
 
// Вывод списка на экран
void CSpisok::Show () 
{
    for (node* pointer = head; pointer != NULL; pointer = pointer->next)
        cout << pointer->data << " ";
    cout << endl;
}
 
/* Перегрузка операторов */
void CSpisok::operator ++ (void)
{
    /* Сортируем методом пузырьков (что это такое - гуглим, ибо это
    самая простая сортировка и её должен знать каждый */
    node* p1 = head;
    while (p1) // Эквивалентно p1 != NULL
    {
        node* p2 = p1;
        while(p2)
        {
            if (p2->data < p1->data)
            {
                int tmp = p1->data;
                p1->data = p2->data;
                p2->data = tmp;
            }
            p2 = p2->next;
        }
        p1 = p1->next;
    }
}
void CSpisok::operator -- (void)
{
    /* Перевернуть список легко - достаточно пересоздать его стеком */
    node* tmp_head = NULL,
        * tmp_pointer,
        * pointer = head;
 
    while (pointer)
    {
        if (tmp_head == NULL)
        {
            tmp_head = new node;
            tmp_head->data = pointer->data;
            tmp_head->next = NULL;
        }
        else
        {
            tmp_pointer = new node;
            tmp_pointer->data = pointer->data;
            tmp_pointer->next = tmp_head;
            tmp_head = tmp_pointer;
        }
        // Заодно сразу будем чистить память, удаляя наш список, ибо потом он нам не нужен
        node* del = pointer;
        pointer = pointer->next;
        delete del;
    }
    head = tmp_head;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <locale>
#include <time.h>
#include "Spisok.h"
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    CSpisok C1(8);
    C1++;
    C1.Show();
    C1--;
    C1.Show();
 
    cin.get();
    return 0;
}
Вложения
Тип файла: rar 4_laba_7_variant.rar (5.7 Кб, 4 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru