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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
14.04.2012, 11:40     Перегрузка операторов #1
Добрый день! Интересует перегрузка операторов(--, !=, <<). Мне когда-то преподаватель объяснял через TPoint , но к сожалению забыл. Помогите реализовать перегрузку вышеуказанных операций(простой перегрузкой первые два(--,!=). Компонентной последнюю(<<) ). Заранее спасибо.

P.S Наработок нет, так как даже не знаю с чего начать даже
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2012, 11:40     Перегрузка операторов
Посмотрите здесь:

перегрузка операторов C++
C++ перегрузка операторов
C++ Перегрузка операторов
Перегрузка операторов C++
C++ Перегрузка операторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
14.04.2012, 12:11     Перегрузка операторов #2
Ну, первые два:
C++
1
2
3
4
5
ClassName ClassName::operator ++()
{
.....//Здесь пишем, что он должен делать
return *this;
}
C++
1
2
3
4
5
6
bool ClassName::operator !=()
{
if(...)//Пишем условие
return true;
return false;
}
Как перегружать << -- не знаю.
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
14.04.2012, 12:38  [ТС]     Перегрузка операторов #3
Помоему, тогда перегрузка -- будет так же, как и ++, только делать другую операцию...

C++
1
2
3
4
5
ClassName ClassName::operator --()
{
 buff = buff -1;
return *this;
}
C++
1
2
3
4
5
6
bool ClassName::operator !=()
{
if(...)//Пишем условие //сюда условие равенства? или же неравенства? 
return true;
return false;
}
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
14.04.2012, 12:45     Перегрузка операторов #4
Ну, ты писал, что последнюю - компонентой, а я так не умею
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
14.04.2012, 12:48  [ТС]     Перегрузка операторов #5
Читай выше.компонентной функцией – операция (реализуется внутри класса), в виде простой функции – операции (реализуется вне класса).

В условие if(...) ставить равенство переменных?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2012, 13:09     Перегрузка операторов #6
Цитата Сообщение от Aero93 Посмотреть сообщение
Добрый день! Интересует перегрузка операторов(--, !=, <<). Мне когда-то преподаватель объяснял через TPoint , но к сожалению забыл. Помогите реализовать перегрузку вышеуказанных операций(простой перегрузкой первые два(--,!=). Компонентной последнюю(<<) ). Заранее спасибо.
Для какого класса? Как его зовут, какие поля имеет, какова их семантика, что должно происходить при декременте, как хочешь сравнивать, в каком формате выводить (или это оператор сдвига?)? В случае, например, вектора можно сравнивать модули (длины) векторов, орты (единичные векторы, характеризующие направление), а можно одновременно то и другое. Вектор может быть представлен как в декартовых, так и в полярных, сферических и даже цилиндрических координатах, что также влияет на текст сравнения. А может надо реализовать сравнение полярных векторов с декартовыми? Или цилиндрических со сферическими? А декремент вектора, это сокращение модуля (длины), или поворот на некоторый угол? Если поворот, то по какой оси? И что такое простая и компонентная перегрузка? На сколько мне известно, вообще нет таких терминов. А может у тебя комплексные числа? Они тоже могут быть алгебраическими и тригонометрическими, что меняет текст сравнения. И могут сравниваться по модулю, по углу, по действительной части, по мнимой, или целиком. А может надо реализовать сравнение алгебраических с тригонометрическими? Или у тебя строки? Длинные арифметика? Какая: целочисленная, или дробная? А может векторные рисунки? Или звуковые треки? Надо сравнить голоса? Или слова? Или это программы на php и надо сравнить их на эквивалентность? А декремент - удаление последнего оператора? Или строки? Математические выражения? В какой нотации?
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
14.04.2012, 13:57  [ТС]     Перегрузка операторов #7
Цитата Сообщение от taras atavin Посмотреть сообщение
Для какого класса? Как его зовут, какие поля имеет, какова их семантика, что должно происходить при декременте, как хочешь сравнивать, в каком формате выводить (или это оператор сдвига?)? В случае, например, вектора можно сравнивать модули (длины) векторов, орты (единичные векторы, характеризующие направление), а можно одновременно то и другое. Вектор может быть представлен как в декартовых, так и в полярных, сферических и даже цилиндрических координатах, что также влияет на текст сравнения. А может надо реализовать сравнение полярных векторов с декартовыми? Или цилиндрических со сферическими? А декремент вектора, это сокращение модуля (длины), или поворот на некоторый угол? Если поворот, то по какой оси? И что такое простая и компонентная перегрузка? На сколько мне известно, вообще нет таких терминов. А может у тебя комплексные числа? Они тоже могут быть алгебраическими и тригонометрическими, что меняет текст сравнения. И могут сравниваться по модулю, по углу, по действительной части, по мнимой, или целиком. А может надо реализовать сравнение алгебраических с тригонометрическими? Или у тебя строки? Длинные арифметика? Какая: целочисленная, или дробная? А может векторные рисунки? Или звуковые треки? Надо сравнить голоса? Или слова? Или это программы на php и надо сравнить их на эквивалентность? А декремент - удаление последнего оператора? Или строки? Математические выражения? В какой нотации?
Меня интересует простая перегрузка операторов... -- инкремент; != сравнение двух чисел. << - сдвиг, к примеру: b=a<<3 . Никаких наворотов. Езе раз повторюсь, простейшая перегрузка операторов. Ну может так наш преподаватель выражается... Но суть в этом: простая : выполняется вне класса; компонентная : выполняется в самом классе.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1785
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
14.04.2012, 14:43     Перегрузка операторов #8
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
Class A
{
private:
   int x;
public:
 friend A operatop--(A);
 friend A operatop<<(A,int);
 friend bool operatop!=(A,A);
};
A operatop--(A a)
{
    a.x--;
    return a;
}
A operatop<<(A a,int n)
{
   a.x<<=n;
   return a;
}
bool operatop!=(A a1,A a2)
{
   if(a1.x!=a2.x)return true;
   return false;
}
Dekio
Фрилансер
Эксперт C++
 Аватар для Dekio
5816 / 1214 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
14.04.2012, 17:11     Перегрузка операторов #9
Цитата Сообщение от zss Посмотреть сообщение
operatop
книгу почитайте
zss
14.04.2012, 20:44
  #10

Не по теме:

Цитата Сообщение от Dekio Посмотреть сообщение
книгу почитайте
Ну, бывает, чего уж там...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2012, 17:49     Перегрузка операторов
Еще ссылки по теме:

C++ Перегрузка операторов С++
C++ перегрузка операторов
C++ Перегрузка операторов

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

Или воспользуйтесь поиском по форуму:
Aero93
8 / 8 / 1
Регистрация: 19.12.2011
Сообщений: 35
18.04.2012, 17:49  [ТС]     Перегрузка операторов #11
Помогите реализовать это:через указанные выше операторы надо:1) присвоить полям объекта "а" поля предыдущего по списку объекта; 2)Если В.[кол-во]!=C[кол-во], то А=В+С, иначе А=0;
3)A.[name]=(B.[name]<<C.[name](на кол-во символов объекта "С" поля name));
A.[maker]=B.[maker];
A.[sell]=B.[sell];

Как я понял , надо в классе создать в private sell, name,maker .
Объявить конструктор закинуть данные в эти переменные(через this->), сделать массив класса(для первого). И дальше оперировать с этими данными?

Буду очень благодарен.
Yandex
Объявления
18.04.2012, 17:49     Перегрузка операторов
Ответ Создать тему
Опции темы

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