Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синтаксис и использование operator, operator, с чем его едят?=) 
:(
    Опции темы
alexey009
Дата 15.3.2009, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: нет
Всего: 2



Доброе время суток. Начал изучать С++. Приступил к теме использования operator, т.е. перегрузки операций.
Сначала хочется разобраться с элементарными операциями (+ - += -=).
Например, есть класс
Код

class A{
int _x, _y;
public:
int get_x(){
return this->_x;
}
int get_y(){
return this->_y;
}
};
int main(){
int x,y;
A a(12, 14);
return 0;
}

Теперь вот что хочется, перегрузить оператор + для сложения 2х переменных.(Это так для понимания).
Затем, сделать 2 объекта:
Код

A a1(5, 6);
A a2(15, 16);

Хочется перегрузить оператор += чтобы сложить первые переменные(5 и 15) и вторые (6 и 16). и результаты записать в _x, _y;

Если не сложно, подскажите как это сделать? Или посоветуйте литературу(Читал C++ для чайников и Павлоскую). Спасибо.
PM MAIL   Вверх
Acer
Дата 15.3.2009, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: нет
Всего: 8



operators
И еще рекомендую заглянуть в книгу Страуструпа. Там это все описанно
PM MAIL   Вверх
zim22
Дата 15.3.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



alexey009, взял на себя наглость "отрефакторить" код.
Код
class A {
public:    
    A(const int &v1 = 0, const int &v2 = 0) : _x(v1), _y(v2) { }
    int get_x() const { return _x; }
    int get_y() const { return _y; }
private:        
    int _x, _y;
};

int main()
{    
    A a1(5, 6);
    A a2(15, 16);

    return 0;
}



--------------------
PM MAIL   Вверх
andrew_121
Дата 15.3.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



alexey009, Учись у zim22 как код форматировать нужно!!! Потому как иногда просто лень глаза напрягать. И по этому ты ответа можешь не поучить.

Добавлено через 11 минут и 54 секунды
Вот перегрузка += и =. Остальные сам поймешь как.
Код

class A {
public:    
    A(const int &v1 = 0, const int &v2 = 0) : _x(v1), _y(v2) { }
    int get_x() const { return _x; }
    int get_y() const { return _y; }
    /**/
    A& operator= (const A& o) {
        _x = o._x;
        _y = o._y;
        
        return *this;
    }
    A& operator+= (const A& o) {
        _x = _x + o._x;
        _y = _y + o._y;
        
        return *this;
    }
private:        
    int _x, _y;
};

int main() {

    A a1(5, 6);
    A a2(15, 16);
    A a3;
    
    a3 = a1 += a2;
    
    return 0;
}




--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
alexey009
Дата 15.3.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 28.7.2008

Репутация: нет
Всего: 2



andrew_121, спасибо Вам большое=)
Но есть несколько вопросов по коду.
1. Для чего всюду используется const?
2. Почему в operator возращается *this?
3. Можете объяснить этот код?
A& operator= (const A& o)
можно ли его переписать так:
A operator= (const A o)
В чем разница и чем предложенный Вами код "лучше"?=)
PM MAIL   Вверх
andrew_121
Дата 15.3.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



alexey009
1. const говорит о том, что аргумент остается неизменным.
2. Потому что, operator+= перегружен как член класса.
3. Собственно, оператор присвоения.
Цитата

можно ли его переписать так:
A operator= (const A o)

Можно. Но в этом случае нет надобности использовать const. Так как аргумент передается по значению. Т.е. копированием.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
zim22
Дата 15.3.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



alexey009, не ленитесь. 
Acer привёл отличную ссылку на операторы. вам осталось лишь прочитать её.


--------------------
PM MAIL   Вверх
bsa
Дата 17.3.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(alexey009 @ 15.3.2009,  12:11)
1. Для чего всюду используется const?
2. Почему в operator возращается *this?
3. Можете объяснить этот код?
A& operator= (const A& o)
можно ли его переписать так:
A operator= (const A o)
В чем разница и чем предложенный Вами код "лучше"?=)

1. const используется исключительно с целью создания кода, который сам указывает на ошибки на этапе компиляции (т.е. по логике ты не имеешь права менять аргументы в операторе сложения, но при использовании const и попытке изменить, ты получишь по рукам от компилятора)
2. Читай книжку. В частности, чтобы можно было делать такое: c = (a = x) + b;
3. A& operator=(const A& v) - выполняется быстрее, чем A operator=(A v), так как во втором случае вместо одного вызова метода фактически будет:
Код
A(v); //конструктор копирования - создание копии v;
operator=();
A(r); //конструктор копирования - создание копии возвращаемого значения
~A(); //деструктор - уничтожение копии возвращаемого значения
~A(); //деструктор - уничтожении копии v

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.