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

Перегрузка операторов, дружественные функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.67
igorio4eg
 Аватар для igorio4eg
3 / 3 / 0
Регистрация: 01.03.2010
Сообщений: 83
29.11.2010, 21:37     Перегрузка операторов, дружественные функции #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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <conio.h>
using namespace std;
class Numbers
{
    friend Numbers & operator--(Numbers &);
    friend Numbers operator-(Numbers & d, const Numbers & rhs);
public:
    Numbers(int numb = 1):number(numb) {} // Конструктор
    const Numbers & operator++();         // префиксная перегрузка ++
    Numbers operator+(const Numbers &);   // перегрузка +
    int GetNumber() const { return number; } 
private:
    int number;
};
const Numbers & Numbers::operator++()
{
    ++number;
    return *this;
}
Numbers Numbers::operator+(const Numbers & rhs)
{
    return Numbers(number + rhs.GetNumber()); 
}
Numbers & operator--(Numbers & d)
{
    --d.number;
    return d;
}
Numbers operator-(Numbers & d, const Numbers & rhs)
{
    return Numbers(d.number - rhs.GetNumber());
}
int main(void)
{
    Numbers n1, n2(10), n3;
    cout << "n1: " << n1.GetNumber() << endl;
    cout << "n2: " << n2.GetNumber() << endl << endl;
    n1++;  n2--;
    cout << "n1++: " << n1.GetNumber() << endl;
    cout << "n2--: " << n2.GetNumber() << endl << endl;
    n3 = n2 - n1;
    cout << "n3 = n2 - n1: " << n3.GetNumber() << endl << endl;
    n3 = n2 + n1;
    cout << "n3 = n2 + n1: " << n3.GetNumber() << endl;
 
    getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.11.2010, 21:41     Перегрузка операторов, дружественные функции #2
Думаю, имеется ввиду когда один из операндов - элемент класса, а второй - число типа int.
igorio4eg
 Аватар для igorio4eg
3 / 3 / 0
Регистрация: 01.03.2010
Сообщений: 83
29.11.2010, 21:43  [ТС]     Перегрузка операторов, дружественные функции #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Думаю, имеется ввиду когда один из операндов - элемент класса, а второй - число типа int.
А.. ясно, а как это примерно реализовать ?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.11.2010, 21:44     Перегрузка операторов, дружественные функции #4
С помощью дружественной функции. Надо перегрузить её два раза, один раз - когда левый операнд типа инт, второй раз - когда второй операнд типа инт.
igorio4eg
 Аватар для igorio4eg
3 / 3 / 0
Регистрация: 01.03.2010
Сообщений: 83
29.11.2010, 21:50  [ТС]     Перегрузка операторов, дружественные функции #5
А такой вариант не пойдет ?
C++
1
2
3
4
Numbers::operator unsigned short()
{
    return (int(number));
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
29.11.2010, 22:02     Перегрузка операторов, дружественные функции #6
Наверное что-то вроде этого:

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
#include <iostream>
#include <conio.h>
using namespace std;
class Numbers
{
        friend Numbers & operator--(Numbers &);
        friend Numbers operator-(Numbers & d, const Numbers & rhs);
public:
        Numbers(int numb = 1):number(numb) {} // Конструктор
        const Numbers & operator++();         // префиксная перегрузка ++
        
        // Перегрузка для использования операций "+" со встроенным типом int
        friend Numbers &operator+(int lhs, const Numbers &rhs);
        friend Numbers &operator+(const Numbers &lhs, int rhs);
        friend Numbers &operator+(const Numbers &, const Numbers &);   // перегрузка +
 
        int GetNumber() const { return number; } 
private:
        int number;
};
const Numbers & Numbers::operator++()
{
        ++number;
        return *this;
}
 
Numbers & operator--(Numbers & d)
{
        --d.number;
        return d;
}
Numbers operator-(Numbers & d, const Numbers & rhs)
{
        return Numbers(d.number - rhs.GetNumber());
}
 
Numbers &operator+(int lhs, const Numbers &rhs)
{
    return Numbers (lhs + rhs.number);
}
 
Numbers &operator+(const Numbers &lhs, int rhs)
{
    return Numbers (lhs.number + rhs);
}
 
Numbers &operator+(const Numbers &lhs, const Numbers &rhs)
{
        return Numbers (lhs.number + rhs.number); 
}
 
int main(void)
{
        Numbers n1, n2(10), n3;
        cout << "n1: " << n1.GetNumber() << endl;
        cout << "n2: " << n2.GetNumber() << endl << endl;
        n1++;  n2--;
        cout << "n1++: " << n1.GetNumber() << endl;
        cout << "n2--: " << n2.GetNumber() << endl << endl;
        n3 = n2 - n1;
        cout << "n3 = n2 - n1: " << n3.GetNumber() << endl << endl;
        n3 = n2 + n1;
        cout << "n3 = n2 + n1: " << n3.GetNumber() << endl;
        n3 = 3 + n2;
        cout << "n3 = 3 + n2: " << n3.GetNumber() << endl;
        n3 = n2 + 1;
        cout << "n3 = n2 + 1: " << n3.GetNumber() << endl;
 
        getch();
}
Добавлено через 3 минуты
Хотя нет, что-то левое... Надо спать...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 22:08     Перегрузка операторов, дружественные функции
Еще ссылки по теме:

C++ Перегрузка операторов
C++ Перегрузка операторов
Дружественные перегрузки операторов и дружественные классы C++

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

Или воспользуйтесь поиском по форуму:
igorio4eg
 Аватар для igorio4eg
3 / 3 / 0
Регистрация: 01.03.2010
Сообщений: 83
29.11.2010, 22:08  [ТС]     Перегрузка операторов, дружественные функции #7
[QUOTE=silent_1991;1154069]Наверное что-то вроде этого:

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
#include <iostream>
#include <conio.h>
using namespace std;
class Numbers
{
        friend Numbers & operator--(Numbers &);
        friend Numbers operator-(Numbers & d, const Numbers & rhs);
public:
        Numbers(int numb = 1):number(numb) {} // Конструктор
        const Numbers & operator++();         // префиксная перегрузка ++
        
        // Перегрузка для использования операций "+" со встроенным типом int
        friend Numbers &operator+(int lhs, const Numbers &rhs);
        friend Numbers &operator+(const Numbers &lhs, int rhs);
        friend Numbers &operator+(const Numbers &, const Numbers &);   // перегрузка +
 
        int GetNumber() const { return number; } 
private:
        int number;
};
const Numbers & Numbers::operator++()
{
        ++number;
        return *this;
}
 
Numbers & operator--(Numbers & d)
{
        --d.number;
        return d;
}
Numbers operator-(Numbers & d, const Numbers & rhs)
{
        return Numbers(d.number - rhs.GetNumber());
}
 
Numbers &operator+(int lhs, const Numbers &rhs)
{
    return Numbers (lhs + rhs.number);
}
 
Numbers &operator+(const Numbers &lhs, int rhs)
{
    return Numbers (lhs.number + rhs);
}
 
Numbers &operator+(const Numbers &lhs, const Numbers &rhs)
{
        return Numbers (lhs.number + rhs.number); 
}
 
int main(void)
{
        Numbers n1, n2(10), n3;
        cout << "n1: " << n1.GetNumber() << endl;
        cout << "n2: " << n2.GetNumber() << endl << endl;
        n1++;  n2--;
        cout << "n1++: " << n1.GetNumber() << endl;
        cout << "n2--: " << n2.GetNumber() << endl << endl;
        n3 = n2 - n1;
        cout << "n3 = n2 - n1: " << n3.GetNumber() << endl << endl;
        n3 = n2 + n1;
        cout << "n3 = n2 + n1: " << n3.GetNumber() << endl;
        n3 = 3 + n2;
        cout << "n3 = 3 + n2: " << n3.GetNumber() << endl;
        n3 = n2 + 1;
        cout << "n3 = n2 + 1: " << n3.GetNumber() << endl;
 
        getch();
}
вроде работает, спасибо
Yandex
Объявления
29.11.2010, 22:08     Перегрузка операторов, дружественные функции
Ответ Создать тему
Опции темы

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