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

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

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

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

04.10.2015, 20:13. Просмотров 483. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора сравнения (C++):

Перегрузка оператора сравнения - C++
Скажите, как перегрузить оператор сравнения == и другие? попробовал bool operator == (char* A,char* B) выдает : оператору ,не являющемуся...

Перегрузка оператора сравнения - C++
Перегрузка: bool Zakaz::operator==(Zakaz&amp;B) { if(strcmp(Familia_Zak,B.Familia_Zak)==0 &amp;&amp; Street ==B.Street &amp;&amp; Dom == B.Dom &amp;&amp; Kv ==...

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

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

Перегрузка оператора сравнения для строк - C++
В общем мне нужно сделать такую перегрузку, что бы вместо символа, например, &quot;&lt;&quot; выполнялось сравнение через strcmp, например строка...

Перегрузка оператора сравнения для указателя на объект - C++
Имеется класс такого плана: template &lt;class T&gt; class Node{ private: T data; //other stuff }; Внутри класса перегружены...

15
nmcf
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
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
Сообщений: 43
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
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
04.10.2015, 21:40 #4
Твоя перегрузка применима только к твоему классу base.
Вот это тоже не совсем понятно:
C++
1
    char bfio,borg;
Поля из одного символа, что ли, состоят?
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 43
04.10.2015, 21:43  [ТС] #5
nmcf, ну наверно,
C++
1
string bfio, borg;
0
nmcf
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
04.10.2015, 21:48 #6
Твоя перегрузка так работает:
C++
1
2
3
base a, b;
//...
if (a > b) //...
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 43
04.10.2015, 21:53  [ТС] #7
nmcf, и это будет в main?
0
nmcf
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
04.10.2015, 22:01 #8
Где угодно. Я говорю, что сравниваться должны объекты base, а не char[].
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 43
04.10.2015, 22:07  [ТС] #9
nmcf, почему-то не получается описать объекты base:
ошибка: no matching function for call to 'base::base()'
base a,b;
^
0
Skaarj
2 / 2 / 1
Регистрация: 28.06.2013
Сообщений: 55
04.10.2015, 22:12 #10
Конструктор по умолчанию забыли. Допишите в классе base
C++
1
 base() {}
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 43
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
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
05.10.2015, 15:22 #12
Перегрузка работает для созданных тобою классов, при чём тут обычные строки? Для них сравнение - strcmp().
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 43
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
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
05.10.2015, 21:58 #14
Скобки убери.
C++
1
h.shaker_sort(a, size);
0
Stas1994
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 43
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
05.10.2015, 22:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2015, 22:59
Привет! Вот еще темы с ответами:

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

Сравнить два целых числа, не используя условного оператора, оператора выбора и так же символов сравнения - C++
Добрый день уважаемые программисты, хотелось, чтобы вы помогли мне в решении одной задачи, а именно подсказали идею решения. Задача...

Перегрузка операторов сравнения - C++
Вот этот класс. Помогите пожалуйста. #include &lt;iostream&gt; #include&lt;iomanip&gt; #include&lt;cstring&gt; using namespace std; ...

Перегрузка операторов сравнения - C++
Всем здравствуйте. У меня не выходит перегрузка операторов сравнения для собственного тд, пытаюсь сделать так : bool operator==(myType...


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

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

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