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

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

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

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

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

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

Вот виртуальная ф-ция, которую я вызываю в перегрузке
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;
}
Почему-то в цикл в перегрузке не заходит и сразу же выдает неравенство строк.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
19.05.2010, 23:44     Перегрузка оператора == #2
значит строки не равны
надо смотреть функции влияющие на str
Crudelis
Шаровик затейник
669 / 411 / 13
Регистрация: 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))
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:21     Перегрузка оператора == #4
Цитата Сообщение от Crudelis Посмотреть сообщение
if(strcmp(C,C1))
C и C1 объекты типа Plane
Vera_
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
20.05.2010, 00:27  [ТС]     Перегрузка оператора == #5
Так нужно же перегрузить оператор = =. Смысл тогда его перегружать, если использовать strcmp(C,C1)?

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

Это выделение памяти. я брала его из примера работы с перегрузкой. Ошибку не показывеат..
Crudelis
Шаровик затейник
669 / 411 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:30     Перегрузка оператора == #6
на сколько я помню память выделяется так
C++
1
Plane *C= new Plane[size];
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
20.05.2010, 00:31     Перегрузка оператора == #7
Цитата Сообщение от Vera_ Посмотреть сообщение
if(C == C1)
какбэ надо *C == *C1;
не странно у них адреса разные
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:31     Перегрузка оператора == #8
Цитата Сообщение от Vera_ Посмотреть сообщение
Это выделение памяти. я брала его из примера работы с перегрузкой. Ошибку не показывеат..
это понятно, не понятно что происходит в Plane()
конструктор есть?
Crudelis
Шаровик затейник
669 / 411 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:32     Перегрузка оператора == #9
Цитата Сообщение от Vera_ Посмотреть сообщение
Смысл тогда его перегружать, если использовать strcmp(C,C1)?
я видел вы сравнивали две строки:

Цитата Сообщение от Vera_ Посмотреть сообщение
if(C == C1)
делается это с помощью
strcmp
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:32     Перегрузка оператора == #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
какбэ надо *C == *C1;
не странно у них адреса разные
действительно
Vera_
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;
}
Про адреса не совсем поняла(
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
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;
        }
}
Vera_
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
20.05.2010, 00:55  [ТС]     Перегрузка оператора == #13
Пробовала, всё равно не получается(
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
20.05.2010, 01:04     Перегрузка оператора == #14
я думаю едва ли можно нам тут разобраться, столько классов, методов и членов скрытых от нашего взора, я думаю тут все должно быть намного проще
Vera_
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 5
20.05.2010, 01:10  [ТС]     Перегрузка оператора == #15
Эх, очень жаль. Но всё равно спасибо
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
20.05.2010, 01:28     Перегрузка оператора == #16
Vera_, минуточку! Оператор == бинарный - то есть требует двух операндов, а Вы ему один подсунуть пытаетесь...
C++
1
bool operator == (const Plane & a, const Plane & b);
так как-то...
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
20.05.2010, 17:26     Перегрузка оператора == #17
Цитата Сообщение от easybudda Посмотреть сообщение
Оператор == бинарный - то есть требует двух операндов, а Вы ему один подсунуть пытаетесь...
есть разные формы операторов - глобальные - описанные как у вас и классовые, описанные как у автора топика
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2010, 18:17     Перегрузка оператора ==
Еще ссылки по теме:

C++ Перегрузка оператора =
C++ Перегрузка оператора ++
C++ Перегрузка оператора <<
C++ Перегрузка оператора >>
Перегрузка оператора new[] C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
20.05.2010, 18:17     Перегрузка оператора == #18
Цитата Сообщение от alex_x_x Посмотреть сообщение
есть разные формы операторов - глобальные - описанные как у вас и классовые, описанные как у автора топика
Да я в курсе... Только классовая в этом случае чуднО вызывалась бы...
Yandex
Объявления
20.05.2010, 18:17     Перегрузка оператора ==
Ответ Создать тему
Опции темы

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