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

Как же все-таки лучше всего перегружать операторы? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нахождение корня уравнения http://www.cyberforum.ru/cpp-beginners/thread950029.html
найти корни уравнения и отделить один из них методом деления отрезка пополам x^2=sinx
C++ как правильно создать opengl проэкт в IDE code blocks чтобы компилировался? создаю новый проект опенгл, но нифига не компилируется выдает кучу ошибок http://www.cyberforum.ru/cpp-beginners/thread950027.html
C++ Множественное наследование
Есть два класса Human(fname, lname) и класс Employee c чисто виртуальными функц (зарплата и печать). На базе этих классов нужно создать классы Boss , Worker, Stajeer. Есть файл с именами и фамилиями сотрудников, нужно считать данные обработать и создать файл имя-фамилия-должность-зарплата. Ну допустим создали vector обектов Human которых инициализировали даными из файла, а как теперь...
C++ Динамическая библиотека
В C++ я полный ноль, хочу знать как создаются библиотеки, которые подключаются в .NET как DLLImport. имеют точку входу, параметры... пример взял отсюда http://msdn.microsoft.com/ru-ru/library/ms235636(v=vs.90).aspx но там точка входа получается такая "?Add@MyMathFuncs@MathFuncs@@SANNN@Z" можно ли изменить ее на такую, какую хочу я? просто Add например.
C++ n ферзей не бьют друг друга http://www.cyberforum.ru/cpp-beginners/thread950007.html
Расставить size ферзей не бьющих друг друга на доске size*size. Вывести в глобальный массив mass. В mass поместить номер столбца(нумерация с нуля), на который нужно поставить ферзя в i-той строке. Нужно использовать рекурсию. И функцию attacking(именно в этом виде). Помогите плз только начал изучать c++ не могу разобраться. Рекурсия вообще тьма. bool attacking(int x1,int y1,int x2, int...
C++ Указатель на структуру Здравствуйте. Объявлена структура: typedef struct str { long field1; .... } str_1; подробнее

Показать сообщение отдельно
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
08.09.2013, 14:25  [ТС]     Как же все-таки лучше всего перегружать операторы?
Цитата Сообщение от xtorne21st Посмотреть сообщение
Для того, чтобы не захламльть класс вспомогательными функциями, без которых, по сути можно и обойтись.
так эти функции и не нужны
плюс, как уже сказали:
Цитата Сообщение от Jupiter Посмотреть сообщение
если перегруженный оператор меняет состояние объекта для которого он вызывается - перегружаем его как мембер
а префиксный инкремент и декрмент как-раз изменяют состояние объекта, да и скрины из книги показывают, что friend не нужен, я лучше доверюсь своему чутью, книгам, опытным пользователям этого форума, чем какому-то учителю, написавшему статью на хабре, где никто не имеет своего мнения, лишь бы им не слили карму...

Добавлено через 15 минут
Побыстрому написал перегрузки, чтобы запомнить, всё ли правильно? Или что-нибудь лучше сделать по-другому?
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
class Integer
{
    int p;
public:
    int get(void) { return p; }
    void add(int pp) { p+=pp; }
    Integer(int pp) { p=pp; }
    // перегрузка операторов
    Integer(const Integer&);
    // унарные операторы
    Integer& operator= (const Integer&);
    const Integer operator+ () const;
    const Integer operator- () const;
    Integer& operator+= (const Integer&);
    Integer& operator-= (const Integer&);
    Integer& operator++ ();
    const Integer operator++ (int);
    Integer& operator-- ();
    const Integer operator-- (int);
    // операторы ввода/вывода
    friend std::ostream &operator<< (std::ostream&, const Integer&);
    friend std::istream &operator>> (std::istream&, Integer&);
    // операторы сравнения
    friend bool operator == (const Integer&, const Integer&);
    friend bool operator < (const Integer&, const Integer&);
};
// перегрузка копирующего конструктора
Integer::Integer(const Integer& obj)
{
    p=obj.p;
}
// перегрузка присваивания
Integer& Integer::operator= (const Integer& obj)
{
    if (this != &obj)
        p=obj.p;
    return *this;
}
// перегрузка унарного +
const Integer Integer::operator+ () const
{
    return Integer(p);
}
// перегрузка унарного -
const Integer Integer::operator- () const
{
    return Integer(-p);
}
// перегрузка арифметического присваивания +=
Integer& Integer::operator+= (const Integer& obj)
{
    p+= obj.p;
    return *this;
}
// перегрузка арифметического присваивания -=
Integer& Integer::operator-= (const Integer& obj)
{
    p-= obj.p;
    return *this;
}
// перегрузка префиксного инкремента
Integer& Integer::operator++ ()
{
    p++;
    return *this;
}
// перегрузка постфиксного инкремента
const Integer Integer::operator++ (int)
{
    return Integer(++p);
}
// перегрузка префиксного декремента
Integer& Integer::operator-- ()
{
    p--;
    return *this;
}
// перегрузка постфиксного декремента
const Integer Integer::operator-- (int)
{
    return Integer(--p);
}
 
// БИНАРНЫЕ ОПЕРАТОРЫ
// перегрузка сложения
Integer operator+ (const Integer left, const Integer right)
{
    Integer rez(left);
    rez+=right;
    return rez;
}
// перегрузка вычетания
Integer operator- (const Integer left, const Integer right)
{
    Integer rez(left);
    rez-=right;
    return rez;
}
// перегрузка ввода/вывода
std::ostream &operator<< (std::ostream& out, const Integer& obj)
{
    out<<obj.p;
    return out;
}
std::istream &operator>> (std::istream& in, Integer& obj)
{
    in>>obj.p;
    return in;
}
// перегрузка логических операторов
bool operator == (const Integer& obj1, const Integer& obj2)
{
    return (obj1.p==obj2.p);
}
bool operator < (const Integer& obj1, const Integer& obj2)
{
    return (obj1.p<obj2.p);
}
 
Текущее время: 21:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru