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

Переопределение операторов как член-класса и как дружественная функция - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив.Помогите решить. http://www.cyberforum.ru/cpp-beginners/thread542525.html
задан целочисленный массив U(17) найти нечетные элементы, которые встречаются больше одного разу.Вивесты эти элементы и их индексы. Буду благодарен любой помощи.
C++ Программирование задач обработки структур и файлов помогите пожалуйста! Даны сведения о студентах группы: ФИО студента, дата рождения студента, место рождения студента. Вывести список группы по убыванию года рождения студента. http://www.cyberforum.ru/cpp-beginners/thread542518.html
Процедуры функции.не знаю как решить. C++
Решить с помощью процедуры-функции.Буду рад любой помощи. заданные действительные числа m,n.Вычислить (рис 7), где (рис 7-1).
C++ strtok
как с помощью функции strtok вывести последнее слово
C++ нужно удалить из строки наибольшее и наименьшее слово http://www.cyberforum.ru/cpp-beginners/thread542504.html
нужно разделить сроку на слова и вывести строку без этих слов. я делаю так: сначала запоминаем каждое слово в эелементе массива и длину этого слова в свой элемент массива #include <stdio.h> #include <conio.h> #include <string.h> #incluse <stdlib.h> void main() {char st="Babak Kirilo Bodnar Ivan Boxonko Nazar Bik Ivan Gavrilyuk Ivan Gzhegockij Roman Gishka"; char *slovo; ...
C++ Не происходит обмена значениями. В чем проблема? #include <iostream> using namespace std; void change(int &a, int &b); int main() { int a=1,b=2; подробнее

Показать сообщение отдельно
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.04.2012, 16:02     Переопределение операторов как член-класса и как дружественная функция
Привет.

Задача создать класс целых чисел, для него нужно переопределить операторы ++ и + как функции-члены и -- и - как дружественные функции.
С 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
27
28
29
30
31
32
33
34
class Int {
    friend ostream& operator<<(ostream&, const Int&);
    friend istream& operator>>(istream&, Int&);
 
    friend Int& operator--(Int&);
public:
    int data;
 
    Int() {data = 0;}
    Int(int data) {Int::data = data;}
 
    Int& operator++();
};
 
Int& Int::operator++() {
    ++data;
    return *this;
}
////////////// - не знаю как определить - //////////////////////
Int& operator--(Int&) {
    --Int.data;
   return *Int.data;
}
///////////////////////////////////////////////////////////////////
ostream& operator<<(ostream& cout_, const Int& object) {
    cout_ << object.data;
    return cout_;
}
 
istream& operator>>(istream& cin_, Int& object)
{
    cin_ >> object.data;
    return cin_;
}
Добавлено через 26 минут
Сейчас вычитал, что у friend перегрузки нету указ. на this.
Это же значит что должно быть 2 операнда в параметрах функции. А какие 2 операнда могут быть в УНАРНОЙ операции?

Добавлено через 15 минут
Разобрался с этим. Не надо 2 значения передавать. Надо передать одно. На сам объект класса, который будем декрементировать.
Прототип:
C++
1
friend Int& operator--(Int&);
Определение сделал таким:
C++
1
2
3
4
5
Int& operator--(Int &operand) {
    Int result;
    result.data -= 1;
    return result;
}
Но тогда вызов должен быть таким:
C++
1
2
        Int item = 5;
        item = item--;
Как добиться того, чтобы операция работала просто так
C++
1
item--;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru