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

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

Войти
Регистрация
Восстановить пароль
 
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
#1

Перегрузка оператора *= - C++

13.12.2013, 23:37. Просмотров 224. Ответов 3
Метки нет (Все метки)

как для заданного класса point перегрузить оператор *= всеми возможными способами (член класса, друг класса)?
P.S. оператор *= должен быть применен для двух объектов класса point, он осуществляет умножения соответствующих координат точек и запись полученных результатов в координаты первой точки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class point
{
    int *x, *y, *z;
public:
    point(int c1 = 0, int c2 = 0, int c3 = 0)
    {
        x = new int(c1);
        y = new int(c2);
        z = new int(c3);
    }
    ~point()
    {
        delete x;
        delete y;
        delete z;
    }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2013, 23:37     Перегрузка оператора *=
Посмотрите здесь:

перегрузка оператора + C++
C++ Перегрузка оператора ~
перегрузка оператора C++
Перегрузка оператора C++
Перегрузка оператора [] C++
C++ Перегрузка оператора <
C++ Перегрузка оператора []
Перегрузка оператора ~ C++
Перегрузка оператора = C++
C++ Перегрузка оператора +
C++ Перегрузка оператора ->
Перегрузка оператора << C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.12.2013, 23:56     Перегрузка оператора *= #2
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
#include <iostream>
 
struct point3d
{
    int x; 
    int y;
    int z;
 
    point3d(int x = 0, int y = 0, int z = 0)
    : x(x)
    , y(y)
    , z(z)
    {
    }
    
    point3d& operator *= (const point3d& other)
    {
        x *= other.x;
        y *= other.y;
        z *= other.z;
        
        return *this;
    }
};
 
point3d operator * (const point3d& a, const point3d& b)
{
    return point3d(a) *= b;
}
 
std::ostream& operator << (std::ostream& os, const point3d& point)
{
    return (os << "point3d(" << point.x << ',' << point.y << ',' << point.z << ')');
}
 
int main() 
{
    point3d a(1, 3, 5), b(2, 1, 0);
    std::cout << (a *= b) << '\n';
    std::cout << a * b;
    return 0;
}
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 00:01  [ТС]     Перегрузка оператора *= #3
спасибо, добрый человек)
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
14.12.2013, 20:13     Перегрузка оператора *= #4
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
#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
 
 
class point
{
    int *x, *y, *z;
public:
    point(int c1 = 0, int c2 = 0, int c3 = 0)
    {
        x = new int(c1);
        y = new int(c2);
        z = new int(c3);
    }
 
//     point& operator*=(const point &pt) {
//     *x*= *pt.x;
//     *y*= *pt.y;
//     *z*= *pt.z;
//     
//     printf ("Почему-то компилятор выбирает эту функцию\n*x= %d\n", *x);
//    
//     return *this;
//    }
 
    friend point& operator*=(point &, const point &);
 
 
    friend ostream& operator << (std::ostream& os, const point& point);
 
    ~point()
    {
        delete x;
        delete y;
        delete z; 
    }
};
 
//Реализация
 
point& operator*=(point &pt_0, const point &pt_1) {
     *pt_0.x*= *pt_1.x;
     *pt_0.y*= *pt_1.y;
     *pt_0.z*= *pt_1.z;
     printf ("А эту выбирает, только если функцию-метод класса закомментить\n");
     return pt_0;
}
 
 
    ostream& operator << (std::ostream& os, const point& point)
    {
      return (os << "point(" << *point.x << ',' << *point.y << ',' << *point.z << ')');
    }
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
    point a(1, 3, 5), b(2, 1, 0);
    cout << a << '\n';
    cout << (a *= b) << '\n';
 
  getchar ();
  return 0;
}
Функция-член класса закомменчена. Использовать либо её, либо ружественную функцию, иначе линкёр ругается.
Yandex
Объявления
14.12.2013, 20:13     Перегрузка оператора *=
Ответ Создать тему
Опции темы

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