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

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

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

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

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

Перегрузка оператора += - C++
У меня имеется структура и метод, который вызывается след образом: A.plus_and_minus(B); Есть огромное желание перегрузить функцию += ,...

Перегрузка оператора = - C++
Есть некий класс. И два класса-наследника. Надо перегрузить оператор =, к тому же в дочерних классах вызывать перегрузку в базовом классе....

Перегрузка оператора = - C++
помогите создать перегруженный оператор = в классе Х, который будет копировать содержание строки S1 в S2.

Перегрузка оператора = - C++
Как перегрузить оператор = для char ?

Перегрузка оператора - C++
Подскажите пожалуйста, способ перегрузки операторов &gt;= и &lt;= в следующей строке if ( ob.str &gt;= '0' &amp;&amp; ob.str &lt;= '9' )Мой вариант не...

Перегрузка оператора != - C++
Помогите разобраться с перегрузкой оператора != есть класс, в котором, в разделе private объявлен указатель на массив std::string *str; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
19.05.2010, 23:44 #2
значит строки не равны
надо смотреть функции влияющие на str
0
Crudelis
Шаровик затейник
674 / 416 / 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))
0
Roma_F
331 / 246 / 5
Регистрация: 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
Шаровик затейник
674 / 416 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:30 #6
на сколько я помню память выделяется так
C++
1
Plane *C= new Plane[size];
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.05.2010, 00:31 #7
Цитата Сообщение от Vera_ Посмотреть сообщение
if(C == C1)
какбэ надо *C == *C1;
не странно у них адреса разные
0
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
20.05.2010, 00:31 #8
Цитата Сообщение от Vera_ Посмотреть сообщение
Это выделение памяти. я брала его из примера работы с перегрузкой. Ошибку не показывеат..
это понятно, не понятно что происходит в Plane()
конструктор есть?
0
Crudelis
Шаровик затейник
674 / 416 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:32 #9
Цитата Сообщение от Vera_ Посмотреть сообщение
Смысл тогда его перегружать, если использовать strcmp(C,C1)?
я видел вы сравнивали две строки:

Цитата Сообщение от Vera_ Посмотреть сообщение
if(C == C1)
делается это с помощью
strcmp
0
Roma_F
331 / 246 / 5
Регистрация: 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
бжни
2447 / 1652 / 84
Регистрация: 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
бжни
2447 / 1652 / 84
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2010, 01:10
Привет! Вот еще темы с ответами:

перегрузка оператора () - C++
Вопрос заключается в следующем: - Что собой представляет перегружаемый оператор()? - Как его перегрузить? ( обычные операторы тип ++ и...

Перегрузка оператора == - C++
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

Перегрузка оператора += - C++
Создал класс дробь. Пытаюсь перегрузить оператор += (или -=, *=, /=) А компилятор выдаёт ошибку 'drob operator+=(drob&amp;)' must take...

Перегрузка оператора [] - C++
Сделал простой аналог auto_ptr для дин. массива. Файл #ifndef ARRAY_PTR_GUARD #define ARRAY_PTR_GUARD template&lt; class Ty_ &gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.05.2010, 01:10
Ответ Создать тему
Опции темы

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