Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
1

Перегрузка оператора сравнения

04.10.2015, 20:13. Просмотров 534. Ответов 15
Метки нет (Все метки)

Посмотрите, пжл, правилен ли синтаксис перегрузки оператора сравнения для двух строк:
C++ (Qt)
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
#include <cstdio>
 
class base
{
public:
    char bfio,borg;
    base(char fio,char org)
    {
        bfio=fio;
        borg=org;
    }
    bool operator>(base& h);
};
 
bool base::operator>(base& h)
{
    if(bfio>h.bfio)
    {
        if(borg>h.borg)
            return true;
        else false;
    }
    else false;
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2015, 20:13
Ответы с готовыми решениями:

Перегрузка оператора сравнения
Скажите, как перегрузить оператор сравнения == и другие? попробовал bool...

Перегрузка оператора сравнения
Перегрузка: bool Zakaz::operator==(Zakaz&amp;B) {...

Перегрузка оператора сравнения и сортировка
Имеется класс строка на основе vector&lt;char&gt;. У меня не получается перегрузить...

Перегрузка оператора сравнения. Вектор
Здравствуйте. Допустим есть класс. class Sector { private: int...

Перегрузка оператора сравнения для строк
В общем мне нужно сделать такую перегрузку, что бы вместо символа, например,...

15
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
04.10.2015, 20:41 2
C++
1
2
3
4
bool base::operator > (const base& h)
{
    return bfio > h.bfio && borg > h.borg;
}
1
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
04.10.2015, 21:35  [ТС] 3
nmcf, а как мне теперь устроить, чтобы в некоторой функции сравнение двух строк производилось в соответствии не со встроенной операцией >, а в соответствии с моей перегрузкой?
C++
1
2
3
4
void base::f(char a[])
{
      if(a[j-1]>a[j]) cout << "...";
}
Ну, то есть, чтобы
C++
1
a[j-1]>a[j]
было истинно независимо от своих значений, а в зависимости от значений переменных
C++
1
string fio, org
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
04.10.2015, 21:40 4
Твоя перегрузка применима только к твоему классу base.
Вот это тоже не совсем понятно:
C++
1
    char bfio,borg;
Поля из одного символа, что ли, состоят?
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
04.10.2015, 21:43  [ТС] 5
nmcf, ну наверно,
C++
1
string bfio, borg;
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
04.10.2015, 21:48 6
Твоя перегрузка так работает:
C++
1
2
3
base a, b;
//...
if (a > b) //...
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
04.10.2015, 21:53  [ТС] 7
nmcf, и это будет в main?
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
04.10.2015, 22:01 8
Где угодно. Я говорю, что сравниваться должны объекты base, а не char[].
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
04.10.2015, 22:07  [ТС] 9
nmcf, почему-то не получается описать объекты base:
ошибка: no matching function for call to 'base::base()'
base a,b;
^
0
Skaarj
2 / 2 / 4
Регистрация: 28.06.2013
Сообщений: 55
04.10.2015, 22:12 10
Конструктор по умолчанию забыли. Допишите в классе base
C++
1
 base() {}
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
05.10.2015, 00:14  [ТС] 11
Все равно не очень понимаю, как работает перегрузка.
Есть у меня набор строк a[], которые нужны отсортировать по первым двум словам fio и org. Ну то есть должен быть написан обычный алгоритм сортировки, как для массива с числами, например, при этом сравнения a[j]>a[j-1] должно означать, что в строке a[j] первые два слова fio[j] и org[j] стоят по алфавиту раньше, чем в строке a[j-1] первые два слова fio[j-1] и org[j-1].
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
05.10.2015, 15:22 12
Перегрузка работает для созданных тобою классов, при чём тут обычные строки? Для них сравнение - strcmp().
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
05.10.2015, 21:55  [ТС] 13
Не получается вызвать функцию-член shaker_sort:
ошибка: no matching function for call to 'base::shaker_sort(base&, int&)'

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
class base
{
    //...
}
void base::shaker_sort(base a[7],int size)
{
   //...
}
int main()
{
int size=7,j;
    base a[size];
 
    for (j=0;j<size;j++)
    {
        fin >> f;
        fin >> i;
        fin >> o;
 
        fio=f+" "+i+" "+o;
 
        a[j].bfio=fio;
        fin >> a[j].borg;
        fin >> a[j].bphone;
        fin >> a[j].bemail;
    }
    base h;
    h.shaker_sort(a[],size);
    fin.close();
    fout.close();
 
 
    return 0;
}
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
05.10.2015, 21:58 14
Скобки убери.
C++
1
h.shaker_sort(a, size);
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 44
05.10.2015, 22:59  [ТС] 15
nmcf, а вы не могли бы посмотреть, где в функции сортировки ошибка, потому что выдаваемый результат вообще какой-то непонятный
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
void base::shaker_sort(base a[6],int size)
{
 
 
    base x;
    int lb=1,ub=size-1,j,k=size-1;
    do
    {
        for(j=ub;j>0;j--)
        {
            if(a[j-1]>a[j])
            {
                x=a[j-1];
                a[j-1]=a[j];
                a[j]=x;
                k=j;
            }
        }
        lb=k+1;
        for(j=1;j<=ub;j++)
        {
            if(a[j-1]>a[j])
            {
                x=a[j-1];
                a[j-1]=a[j];
                a[j]=x;
                k=j;
            }
        }
        ub=k-1;
    }
    while(lb<ub);
}
0
nmcf
6274 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
05.10.2015, 23:24 16
Здесь смотри: https://ru.wikipedia.org/wiki/%D0%A1...B8%D0%B5%D0%BC
0
05.10.2015, 23:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2015, 23:24

Перегрузка оператора сравнения (==) для массивов
Имеется класс-массив. Нужно сравнить два массива при помощи перегрузки...

Перегрузка оператора сравнения для указателя на объект
Имеется класс такого плана: template &lt;class T&gt; class Node{ private: T...

Перегрузка оператора сравнения (сравнивать только по одному полю)
Помогите пожалуйста. совсем не выходит перегрузить оператор == класса Book так,...


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

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

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