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

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

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

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

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

Перегрузка оператора == - C++
нужно сравнить 1) объект класса abc с объектом класса abc1 2) объект класса abc с другим объектом класса abc 3) объект класса abc1...

Перегрузка оператора -> - C++
скажите, а какие особенности перегрузки -> ?

Перегрузка оператора = - C++
Скажи пожалуйста в каких случаях нужно перегружать оператор = ?

Перегрузка оператора [] - C++
Всем привет! Как можно перегрузить оператор так, чтобы к нему можно было обращаться так: class_arr = 5; Где class_arr - переменная...

Перегрузка оператора - C++
Не могу разобратся с перегрузками, помогите пожалуйста ребята Дать определение перегрузке функции и шаблона. 2. Написать алгоритм...

перегрузка оператора () - C++
Вопрос заключается в следующем: - Что собой представляет перегружаемый оператор()? - Как его перегрузить? ( обычные операторы тип ++ и...

3
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 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;
}
1
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 00:01  [ТС] #3
спасибо, добрый человек)
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
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;
}
Функция-член класса закомменчена. Использовать либо её, либо ружественную функцию, иначе линкёр ругается.
0
14.12.2013, 20:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 20:13
Привет! Вот еще темы с ответами:

Перегрузка оператора - C++
Подскажите пожалуйста, способ перегрузки операторов &gt;= и &lt;= в следующей строке if ( ob.str &gt;= '0' &amp;&amp; ob.str &lt;= '9' )Мой вариант не...

Перегрузка оператора != - C++
Помогите разобраться с перегрузкой оператора != есть класс, в котором, в разделе private объявлен указатель на массив std::string *str; ...

Перегрузка оператора > - C++
Добрый день! #include &lt;stdio.h&gt; #include &lt;tchar.h&gt; #include &lt;iostream&gt; template &lt;typename T1, typename T2&gt; bool ...

Перегрузка оператора [] - C++
Сделал простой аналог auto_ptr для дин. массива. Файл #ifndef ARRAY_PTR_GUARD #define ARRAY_PTR_GUARD template&lt; class Ty_ &gt; ...


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

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

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