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

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

Восстановить пароль Регистрация
 
vetal71
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29
28.05.2013, 16:00     Перегрузка операции < для класса вектор #1
всем привет.
есть класс вектор (одномерный массив). есть два объекта A и B этого класса. необходимо перегрузить операцию < (A<B). при этом в A заносится меньшее число, в B большее.
Помогите плиз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Xan_
 Аватар для _Xan_
20 / 20 / 6
Регистрация: 19.09.2010
Сообщений: 85
28.05.2013, 16:10     Перегрузка операции < для класса вектор #2
Не понятно. Как перегрузить то? по каким критериям сравнивать?
vetal71
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29
28.05.2013, 17:46  [ТС]     Перегрузка операции < для класса вектор #3
объект - одномерный массив типа int. нужно поэлементно сравнивать значения массивов объекта A и B
pizurok
 Аватар для pizurok
53 / 67 / 3
Регистрация: 05.05.2013
Сообщений: 2,691
28.05.2013, 17:58     Перегрузка операции < для класса вектор #4
Цитата Сообщение от vetal71 Посмотреть сообщение
объект - одномерный массив типа int. нужно поэлементно сравнивать значения массивов объекта A и B
А можно посмотреть, как объявлен класс вектор?
vetal71
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29
28.05.2013, 20:43  [ТС]     Перегрузка операции < для класса вектор #5
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 минуту
затупил...
вопрос решил. всем спасибо
Yandex
Объявления
28.05.2013, 20:43     Перегрузка операции < для класса вектор
Ответ Создать тему
Опции темы

Текущее время: 16:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru