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

Классы,перегрузка. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
15.10.2011, 21:16     Классы,перегрузка. #1
Всем привет!
Делаю класс комплексных чисел,появился вопрос.
Весь класс писать смысла нет,вопрос не в этом.
Вот он класс:

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
class Cplex
{
    public:
    double re;
    double im;
    //Конструкторы
    Cplex () {}
    Cplex (double r) {re = r; im = 0;}
    Cplex (double a,double b) {re = a; im = b;}
//Перегружаем операторы
/*Если писать вот так,то у меня выдается ошибка.*/
Cplex operator + (Cplex a,const Cplex b)
{
     a.re += re + b.re;
     b.im += im + b.im;
 
return a;
}
}
int main()
{
Cplex z1(1,3);
Cplex z2(2,3);
Cplex z3 = z1+z2;
cout << z3.re << " " << z3.im;
}
В итоге выходят ошибки о том,что Cplex operator + (Cplex a,const Cplex b) must take either zero or one argument и no match for operator - in z1 - z2

В связи с этим у меня вопрос.
Через почему такое?
Если делать так,то все тип-топ
C++
1
2
3
4
5
6
7
8
9
Cplex operator + (Cplex &c) // перегрузка оператора сложения
        {
                Cplex temp;
 
                temp.re = re + c.re;
                temp.im = im + c.im;
 
                return temp;
        }
Прошу вашей помощи.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 21:23     Классы,перегрузка. #2
Rexer, это особенности перегрузки операторов как членов класса. Если вы перегружаете оператор как член класса, то один его операнд (левый в случае сложения. к примеру) передается в него через указатель this, а не через параметры функции. Поэтому прототипы унарных операторов членов класса не имеют параметров вообще, а бинарные имеют один параметр
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
16.10.2011, 01:11  [ТС]     Классы,перегрузка. #3
Большое вам спасибо!
Вы мне очень помогли.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.10.2011, 01:19     Классы,перегрузка. #4
Цитата Сообщение от Rexer Посмотреть сообщение
C++
1
2
3
Cplex () {}
 Cplex (double r) {re = r; im = 0;}
 Cplex (double a,double b) {re = a; im = b;}
первые два конструктора излишни, достаточно одного такого
C++
1
Cplex (double real = 0.0, double imag = 0.0) {re = a; im = b;}
а перегрузку
Цитата Сообщение от Rexer Посмотреть сообщение
C++
1
Cplex operator + (Cplex &c)
C++
1
2
3
4
Cplex operator + (const Cplex & c) const
{
    return Cplex(re + c.re, im + c.im);
}
LosAngeles
Заблокирован
16.10.2011, 06:14     Классы,перегрузка. #5
Цитата Сообщение от Jupiter Посмотреть сообщение
Cplex operator + (const Cplex & c) const
Cplex const operator+(...
Yandex
Объявления
16.10.2011, 06:14     Классы,перегрузка.
Ответ Создать тему
Опции темы

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