Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.67
igorio4eg
4 / 4 / 0
Регистрация: 01.03.2010
Сообщений: 83
#1

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

29.11.2010, 21:37. Просмотров 4289. Ответов 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
#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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2010, 21:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операторов, дружественные функции (C++):

Классы, матрицы, перегрузка операторов, дружественные функции - C++
Гляньте пожалуйста, как получилось сделать задание, что неверно: Создать класс, в котором перегрузить операторы: &amp; для...

Дружественные перегрузки операторов и дружественные классы - C++
#include &lt;iostream&gt; using namespace std; class person; class book { public: book(){}; int get_inf(person &amp;a); void...

Дружественные функции. Наследование. Перегрузка функции - C++
Здравствуйте, у меня проблема Не знаю куда Вставить имеющийся код(В какую строчку или строчки кода). Первый код это было 1 задание, 2-ой...

Дружеские функции и перегрузка операторов - C++
я зоздал класс стека вот class CMyStack { public: CMyStack(); ~CMyStack(); void Push(int d); ...

Перегрузка операторов из дружеской функции в шаблонном классе - C++
Скомпилировал http://dmtsoft.ru/bn/370/as/oneaticleshablon/. Как только перенёс в свой шаблонный класс почти весь этот исходник перестали...

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this - C++
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

6
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
29.11.2010, 21:41 #2
Думаю, имеется ввиду когда один из операндов - элемент класса, а второй - число типа int.
0
igorio4eg
4 / 4 / 0
Регистрация: 01.03.2010
Сообщений: 83
29.11.2010, 21:43  [ТС] #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Думаю, имеется ввиду когда один из операндов - элемент класса, а второй - число типа int.
А.. ясно, а как это примерно реализовать ?
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
29.11.2010, 21:44 #4
С помощью дружественной функции. Надо перегрузить её два раза, один раз - когда левый операнд типа инт, второй раз - когда второй операнд типа инт.
0
igorio4eg
4 / 4 / 0
Регистрация: 01.03.2010
Сообщений: 83
29.11.2010, 21:50  [ТС] #5
А такой вариант не пойдет ?
C++
1
2
3
4
Numbers::operator unsigned short()
{
    return (int(number));
}
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 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 минуты
Хотя нет, что-то левое... Надо спать...
0
igorio4eg
4 / 4 / 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();
}
вроде работает, спасибо
0
29.11.2010, 22:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 22:08
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
Как написать код перегрузки операторов (+= и --) чтобы выполнялось действие v1+=v2--; v1 и v2 - массив чисел

Перегрузка операторов - C++
Здравствуйте! Пытаюсь понять синтаксис перегрузки операторов: Вот код: // Overload operators using member functions. ...

Перегрузка операторов. C++ - C++
Помогите пожалуйста написать программу на тему перегрузка операторов. Задания Унарная операция. Создать объект - связный...

Перегрузка операторов - C++
Даны два одномерных массива. Необходимо сделать перегрузку разности ( - ) этих массивов с получением этого массива.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.