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

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

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

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

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

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

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

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

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

Перегрузка операторов - C++
Помогите разобраться в перегрузке операторов. Нужно создать клас Автомобиль в котором определить поля скорость и стоимость и методы доступа...

Перегрузка операторов - C++
Здравствуйте все. Начали проходить ООП, но хотелось бы узнать больше, подскажите пожалуйста кто знает хорошие книги с грамотным описанием...

Перегрузка операторов -> <- - C++
Здравствуйте в столь позднее время.. Какова особеность перегрузки операторов -&gt; и . ? Что возвращают ? Если можно ссылки на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.11.2010, 21:41     Перегрузка операторов, дружественные функции #2
Думаю, имеется ввиду когда один из операндов - элемент класса, а второй - число типа int.
igorio4eg
4 / 4 / 0
Регистрация: 01.03.2010
Сообщений: 83
29.11.2010, 21:43  [ТС]     Перегрузка операторов, дружественные функции #3
Цитата Сообщение от silent_1991 Посмотреть сообщение
Думаю, имеется ввиду когда один из операндов - элемент класса, а второй - число типа int.
А.. ясно, а как это примерно реализовать ?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.11.2010, 21:44     Перегрузка операторов, дружественные функции #4
С помощью дружественной функции. Надо перегрузить её два раза, один раз - когда левый операнд типа инт, второй раз - когда второй операнд типа инт.
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));
}
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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++
я учусь перегружать операторы,но не получается,выдает exception class Student { public: Student(void) { name=new char; ...

Перегрузка операторов с++ - C++
Доброго времени суток! Возникло недопонимание. Есть абстрактный класс Integer class Integer { public: void virtual print() = 0;...

Перегрузка операторов! - C++
Создать несколько объектов (например, a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса...

Перегрузка операторов - C++
Доброго времени суток. Начал изучать основы ООП, дошел до перегрузки операторов. В программе возникает ошибка при проверке любого...

Перегрузка операторов - C++
Хочу написать функцию вывода стека на экран. Стек построен на основе динамического массива который написал я. И вот интересно, при написаны...


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

Или воспользуйтесь поиском по форуму:
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();
}
вроде работает, спасибо
Yandex
Объявления
29.11.2010, 22:08     Перегрузка операторов, дружественные функции
Ответ Создать тему
Опции темы

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