Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
1

Перегрузка оператора ==

19.05.2010, 23:33. Показов 1246. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я уже встречала подобный вопрос на этом форуме, но у меня всё равно что-то не получается

Вот виртуальная ф-ция, которую я вызываю в перегрузке
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
void Plane::Str(char *str1)
{
    char st[20];
    int a1,b1,c1;
    Line::Str(str1);
    int d=Line::Get_X1();
    int d1=Line::Get_Y1();
    a1=y2-d1;
    b1=d-x2;
    c1=d1*(x2-d)-d*(y2-d1);
    sprintf(st, "a1=%d b1=%d c1=%d",a1, b1, c1);
    sprintf(str1, "%s%s",str1,st);
}
Вот моя перегрузка
bool Plane::operator ==( Plane C)
{
    Str(str);
    C.Str(str);
   for (int i = 0; str[i] == C.str[i]; i++)
   {
   if ((str[i] == NULL) && (C.str[i] == NULL)) 
       return true; 
   }
   return false; 
}
ну и
C++
1
2
3
4
5
6
7
8
void main()
{
        Plane *C= new Plane();
        Plane *C1= new Plane();
    if(C == C1)
    cout<<"C1 = C"<<endl;
    cout<<"C1 != C"<<endl;
}
Почему-то в цикл в перегрузке не заходит и сразу же выдает неравенство строк.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2010, 23:33
Ответы с готовыми решениями:

Перегрузка оператора +
Добрый день)Почему то не работает перегрузка оператора сложения) #include &lt;iostream&gt; #include...

Перегрузка оператора +
не получается в своем классе перегрузить оператор + :( пишет &quot;error C2804: бинарный &quot;operator +&quot;...

Перегрузка оператора +=
Есть два класса: Vec4(вектор из 4х float) и Mat4(вектор из 4х Vec4). Проблема в том что при...

Перегрузка оператора ++
выводит не то значение привет. нужна Ваша подсказка. листинг из учебника: (тема: перегрузка...

17
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
19.05.2010, 23:44 2
значит строки не равны
надо смотреть функции влияющие на str
0
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:15 3
Цитата Сообщение от Vera_ Посмотреть сообщение
C++
1
2
Plane *C= new Plane();
 Plane *C1= new Plane();
что в данных строках хотели реализовать?
похоже на выделение памяти с ошибкой)

Добавлено через 49 секунд
Цитата Сообщение от Vera_ Посмотреть сообщение
if(C == C1)
я бы сделал так:
C++
1
if(strcmp(C,C1))
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:21 4
Цитата Сообщение от Crudelis Посмотреть сообщение
if(strcmp(C,C1))
C и C1 объекты типа Plane
0
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
20.05.2010, 00:27  [ТС] 5
Так нужно же перегрузить оператор = =. Смысл тогда его перегружать, если использовать strcmp(C,C1)?

Plane *C= new Plane();
Plane *C1= new Plane();

Это выделение памяти. я брала его из примера работы с перегрузкой. Ошибку не показывеат..
0
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:30 6
на сколько я помню память выделяется так
C++
1
Plane *C= new Plane[size];
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
20.05.2010, 00:31 7
Цитата Сообщение от Vera_ Посмотреть сообщение
if(C == C1)
какбэ надо *C == *C1;
не странно у них адреса разные
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:31 8
Цитата Сообщение от Vera_ Посмотреть сообщение
Это выделение памяти. я брала его из примера работы с перегрузкой. Ошибку не показывеат..
это понятно, не понятно что происходит в Plane()
конструктор есть?
0
Шаровик затейник
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:32 9
Цитата Сообщение от Vera_ Посмотреть сообщение
Смысл тогда его перегружать, если использовать strcmp(C,C1)?
я видел вы сравнивали две строки:

Цитата Сообщение от Vera_ Посмотреть сообщение
if(C == C1)
делается это с помощью
strcmp
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:32 10
Цитата Сообщение от alex_x_x Посмотреть сообщение
какбэ надо *C == *C1;
не странно у них адреса разные
действительно
0
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
20.05.2010, 00:35  [ТС] 11
Конструктор вот
C++
1
2
3
4
5
6
7
Plane::Plane()
{
    cout<<"x2= ";
    cin>>x2;
    cout<<"y2= ";
    cin>>y2;
}
Про адреса не совсем поняла(
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
20.05.2010, 00:38 12
C++
1
2
3
4
5
6
7
8
9
10
void main()
{
        Plane C;
        Plane C1;
        if(C == C1){
          cout<<"C1 = C"<<endl;
        }else{
          cout<<"C1 != C"<<endl;
        }
}
0
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
20.05.2010, 00:55  [ТС] 13
Пробовала, всё равно не получается(
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
20.05.2010, 01:04 14
я думаю едва ли можно нам тут разобраться, столько классов, методов и членов скрытых от нашего взора, я думаю тут все должно быть намного проще
1
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
20.05.2010, 01:10  [ТС] 15
Эх, очень жаль. Но всё равно спасибо
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,763
20.05.2010, 01:28 16
Vera_, минуточку! Оператор == бинарный - то есть требует двух операндов, а Вы ему один подсунуть пытаетесь...
C++
1
bool operator == (const Plane & a, const Plane & b);
так как-то...
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
20.05.2010, 17:26 17
Цитата Сообщение от easybudda Посмотреть сообщение
Оператор == бинарный - то есть требует двух операндов, а Вы ему один подсунуть пытаетесь...
есть разные формы операторов - глобальные - описанные как у вас и классовые, описанные как у автора топика
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,763
20.05.2010, 18:17 18
Цитата Сообщение от alex_x_x Посмотреть сообщение
есть разные формы операторов - глобальные - описанные как у вас и классовые, описанные как у автора топика
Да я в курсе... Только классовая в этом случае чуднО вызывалась бы...
0
20.05.2010, 18:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2010, 18:17
Помогаю со студенческими работами здесь

Перегрузка оператора []
Есть: class any{ char arr }

Перегрузка оператора
Добрый день! Мне нужно перегрузить в классе двумерного массива оператор ++, чтобы она возвращал...

Перегрузка оператора <<
Как вот в таком классе перегрузить оператор &lt;&lt;? #ifndef MATRIXX_H #define MATRIXX_H #include...

Перегрузка оператора[]
Пример взят из книги Лафоре, тема перегрузка операций. Выдает ошибки: 1.Требуется идентификатор....


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru