Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29

Перегрузка операции < для класса вектор

28.05.2013, 16:00. Показов 2102. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет.
есть класс вектор (одномерный массив). есть два объекта A и B этого класса. необходимо перегрузить операцию < (A<B). при этом в A заносится меньшее число, в B большее.
Помогите плиз
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2013, 16:00
Ответы с готовыми решениями:

Перегрузка операции [][] для класса Матрица
Добрый день. Возможно, кто нить знает, как правильно перегрузить операцию для класса Матрица. Класс описан так class matrix ...

Перегрузка операции + с преобразованием объектов одного класса в объекты другого класса
Доброго времени суток! Изучаю ООП, при выполнении следующего задания возникли сложности: Создать класс Polar для хранения полярных...

Перегрузка операции присваивания для класса
Поискал по форуму но подобной проблемы не нашел. Вот код класса: class Romb { public: Romb () //Крнструктор по умолчанию { ...

4
 Аватар для _Xan_
20 / 20 / 14
Регистрация: 19.09.2010
Сообщений: 85
28.05.2013, 16:10
Не понятно. Как перегрузить то? по каким критериям сравнивать?
0
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29
28.05.2013, 17:46  [ТС]
объект - одномерный массив типа int. нужно поэлементно сравнивать значения массивов объекта A и B
0
 Аватар для pizurok
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
28.05.2013, 17:58
Цитата Сообщение от vetal71 Посмотреть сообщение
объект - одномерный массив типа int. нужно поэлементно сравнивать значения массивов объекта A и B
А можно посмотреть, как объявлен класс вектор?
0
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29
28.05.2013, 20:43  [ТС]
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <iostream>
#include <iomanip>
 
using namespace std;
 
class Vector
{
    friend istream &operator>> (istream &, Vector &);       // перегруженный оператор ввода
    friend ostream &operator<< (ostream &, const Vector &); // перегруженный оператор вывода
private:
    int *vect;
    int size;
 
public:
    Vector();             // конструктор
    explicit Vector(int); // конструктор с параметром
    ~Vector();            // деструктор
    
    
    void setVector();       // заполнение массива
    void getVector();       // вывод массива
    int &operator[] (int );
    const Vector &operator= (const Vector &); // оператор присваивания  
    const Vector &operator< (const Vector &); // оператор <
    int getSize() const                       // Количество элементов массива
    {
        return size;
    }
};
 
Vector::Vector()          // конструктор по умолчанию
{
    size = 10;                      // по умолчанию размер массива 10 элементов
    vect = new int[size];           // выделяем память
    for (int i=0; i < size; i++)    // инициализация массива
        vect[i] = 0;                        
}
 
Vector::Vector(int _size) // конструктор с параметрами
{
    // если значение параметра больше 0, присвоить size значение _size, иначе - 10 
    size = (_size > 0 ? _size : 10);  
    vect = new int[size];           // выделяем память
    for (int i=0; i < size; i++)    // инициализация массива
        vect[i] = 0;
}
 
Vector::~Vector()         // деструктор
{
    delete [] vect;  // удаляем массив
}
 
// перегруженный оператор ввода, для ввода значений массива с клавиатуры
istream &operator>> (istream & input, Vector &obj)
{
    for (int i = 0; i < obj.size; i++)
        input >> obj.vect[i]; // заполняем массив объекта obj
    return input; // позволяет множественный ввод
}
// перегруженный оператор вывода для класса Vector
ostream &operator<< (ostream &output, const Vector &obj)
{
    for (int i = 0; i < obj.size; i++)
    {
        output << setw(5) // под каждое число выделяется 5 позиций
            << obj.vect[i];
    }
    output << endl; // перенос маркера на новую строку
    return output; // позволяет множественный вывод
}
 
int &Vector::operator[] (int subscript)
{
    if(subscript < 0 || subscript >= size)
    {
        cerr << "\n Ошибка индекса: " << subscript << endl;
        exit(1); // завершить работу программы, неправильный индекс
    }
    return vect[subscript]; // возврат ссылки на элемент массива
}
 
const Vector &Vector::operator= (const Vector &right) // оператор присваивания
{
    if (&right != this) // чтобы не выполнялось самоприсваивание
    {
        if (size != right.size)
        {
            delete [] vect; // освободить пространство
            size = right.size; // установить нужный размер массива
            vect = new int [size]; // выделить память под копируемый массив
        }
 
        for (int ix = 0; ix < size; ix++)
            vect[ix] = right.vect[ix]; // скопировать массив
    }
 
    return *this; 
}
    
//перегрузка оператора <
Vector &Vector::operator< (Vector &a)
{
    if (size = a.size) // 
    {
        int n, m;
        for (int i = 0; i < size; i++)
        {
            if (vect[i] > a.vect[i])
            {
                n = vect[i];
                m = a.vect[i];
                vect[i]   = m;
                a.vect[i] = n;
            }
        }
    }
 
    return *this;
}
 
void Vector::setVector() // заполнение массива
{
    for (int i = 0; i < size; i++)
        cin >> vect[i]; // ввод элемента массива с клавиатуры
}
 
void Vector::getVector() // вывод массива
{
    for (int i = 0; i < size; i++)
        cout << setw(5) << vect[i]; // вывод элементов массива на экран
 
    cout << endl; // новая строка
} 
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    int sz;
    cout << "Введите размерность вектора: ";
    cin >> sz;
    cout << endl;
 
    // создаем два объекта a и b
    Vector a(sz);
    cout << "Введите " << sz << " чисел вектора A: " << endl;
    a.setVector(); // заполнение массива с помощью метода класса Vector
    // введенный массив a
    cout << "Вектор A: " << a;
 
    Vector b(sz);
    cout << "Введите " << sz << " чисел вектора B: " << endl;
    b.setVector(); // заполнение массива с помощью метода класса Vector
    // введенный массив b
    cout << "Вектор B: " << b;
 
    if (a < b) 
    {
        cout << a;
        cout << b;
    }
 
    getchar();
    return 0;
}
Добавлено через 4 минуты
в строке
if (a<b)
выдает ошибку "Недопустимое услвоное выражение типа Vector"

Добавлено через 31 минуту
затупил...
вопрос решил. всем спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2013, 20:43
Помогаю со студенческими работами здесь

Для класса Вектор дополнительно перегрузить операции
Имеется класс Вектор Нужно:Дополнительно перегрузить следующие операции: + - сложение векторов; &gt; - сравнение векторов; = = -...

Перегрузка оператора >> для дочернего класса от базового виртуального класса
Доброго вам времени суток! Программирую на С++ не давно, в связи с отсутствием должного времени на поиск ответа в глубинах учебников,...

Перегрузка операции для итератора
Здравствуйте, назрела такая проблема - не перегружается оператор или я неправильно использую перегрузку - 3 дня мучаюсь, уже надоедает,...

Перегрузка операции + для сложения элементов динамического массива
Написал класс, создаваемый объект является динамическим массивом заполняемый рандомом по умолчанию, или через cin, пытаюсь описать...

Перегрузка операции += для наращивания значение времени на заданную величину
Может кто дописать код по вот такому принципу Перегрузить операцию + = для наращивания значение времени на заданную величину, - = для...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru