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

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

19.05.2010, 23:33. Просмотров 816. Ответов 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;
}
Почему-то в цикл в перегрузке не заходит и сразу же выдает неравенство строк.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2010, 23:33
Ответы с готовыми решениями:

Перегрузка оператора []
Проблема в том, что надо обязательно использовать вид obj, а не obj.arr. Иначе...

Перегрузка оператора +
Здравствуйте! Не могу понять, из-за чего появляется ошибка. Вот программа,...

Перегрузка оператора
Здравствуйте. Не могу разобраться, как перезагрузить оператор &gt;&gt;. int a;...

Перегрузка оператора ==
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс...

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

17
Roma_F
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
19.05.2010, 23:44 2
значит строки не равны
надо смотреть функции влияющие на str
0
Crudelis
Шаровик затейник
681 / 430 / 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
Roma_F
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:21 4
Цитата Сообщение от Crudelis Посмотреть сообщение
if(strcmp(C,C1))
C и C1 объекты типа Plane
0
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();

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

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

Перегрузка оператора [][]
допустим у меня есть клас Matrix и я хочу опедилить оператор доступа к его...

Перегрузка оператора =
Ввести строку символов S1. Программа должна содержать перегруженную операцию...

перегрузка оператора
Помогите,пожалуйста! у меня есть класс Gruppa, куда входят студенты...


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

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

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