Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vetal71
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29
#1

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

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

всем привет.
есть класс вектор (одномерный массив). есть два объекта A и B этого класса. необходимо перегрузить операцию < (A<B). при этом в A заносится меньшее число, в B большее.
Помогите плиз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2013, 16:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операции < для класса вектор (C++):

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

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

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

Перегрузка << , >> для шаблонного класса - C++
Доброго времени суток всем! Данная тема не раз подымалась на форуме.. Но есть но.. Помогите перегрузить операторы побитового сдвига для...

Перегрузка оператора для класса - C++
Здравствуйте! Подскажите, пожалуйста, почему так не работает: class ClassA { public: ClassA() { m = 1; ...

Перегрузка операторов для класса - C++
class A { private: size_t i; public: size_t i_get() { return i; } };

4
_Xan_
20 / 20 / 6
Регистрация: 19.09.2010
Сообщений: 85
28.05.2013, 16:10 #2
Не понятно. Как перегрузить то? по каким критериям сравнивать?
0
vetal71
0 / 0 / 0
Регистрация: 24.02.2012
Сообщений: 29
28.05.2013, 17:46  [ТС] #3
объект - одномерный массив типа int. нужно поэлементно сравнивать значения массивов объекта A и B
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,516
28.05.2013, 17:58 #4
Цитата Сообщение от vetal71 Посмотреть сообщение
объект - одномерный массив типа int. нужно поэлементно сравнивать значения массивов объекта A и B
А можно посмотреть, как объявлен класс вектор?
0
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 минуту
затупил...
вопрос решил. всем спасибо
0
28.05.2013, 20:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 20:43
Привет! Вот еще темы с ответами:

перегрузка == для класса string - C++
можно ли для существующего класса string перегрузить оператор не вмешиваясь в библиотеку? ни разу не сталкивался. Error: стринг не...

Перегрузка operator<< для шаблонного класса - C++
Добрый день не могу понять как реализовать перегрузку &lt;&lt; для шаблонного класса template &lt;class T&gt; class List { public: ...

Перегрузка операторов для класса Треугольник - C++
Задание: Перегрузить операторы &gt;, &lt;, == для класса Треугольник относительно сравнения площадей объектов данного класса. Сделать то же...

Перегрузка оператора + для класса Date - C++
Здравствуйте! Как правильно перегрузить оператор +(Date, int) для класса Date, чтобы дата увеличивалась на нужное количество дней? При этом...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.