Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
racer888
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 33
1

Перегрузка операций

06.08.2015, 19:43. Просмотров 897. Ответов 7
Метки нет (Все метки)

Здравствуйте, помогите с лабораторной. Я правильно сделал и как менять названия у перегрузки операций на + и - еще нормально но на скалярное произведение и умножение на скаляр?
Собственно задание вот: Составить описание класса для объектов-векторов, задаваемых координатами концов в трехмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы и разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами, умножения вектора на скалярную величину. Операции сложения, вычитания, скалярного произведения и умножения на скалярную величину реализовать в виде перегрузки операторов. Программа должна содержать меню, позволяющее осуществлять проверку всех методов.
То что накалякал))
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "stdafx.h"
#include <math.h> 
#include <iostream>
using namespace std;
class vek
{
private:
    int x1, y1, z1, x2, y2, z2;
public:
    //---------------------------------------------------------------------------------------------
    void Vektor(){
        cout << "Первого вектора A" << endl;
        cin >> x1;
        cin >> y1;
        cin >> z1;
        cout << endl;
        cout << "Второго вектора B" << endl;
        cin >> x2;
        cin >> y2;
        cin >> z2;
    };
    //---------------------------------------------------------------------------------------------
    void operator++ (){
        int x, y, z;
        x = x1 + x2;
        y = y1 + y2;
        z = z1 + z2;
        cout << "{" << x << ";" << y << ";" << z << "}";
    };
    //---------------------------------------------------------------------------------------------
    void operator-- (){
        int x, y, z;
        x = x1 - x2;
        y = y1 - y2;
        z = z1 - z2;
        cout << "{" << x << ";" << y << ";" << z << "}";
    };
    //---------------------------------------------------------------------------------------------
    void operator* (){
        int x, y, z, sk;
        x = x1 * x2;
        y = y1 * y2;
        z = z1 * z2;
        sk = x*y*z;
        cout << "Склярное произведение = " << sk;
    };
    //---------------------------------------------------------------------------------------------
    void Dlin(){
        int k1, k2;
        k1 = sqrt(x1*x1 + y1*y1 + z1*z1);
        cout << "Длина первого вектора = " << k1 << endl;
        k2 = sqrt(x2*x2 + y2*y2 + z2*z2);
        cout << "Длина первого вектора = " << k2 << endl;
    };
    //---------------------------------------------------------------------------------------------
    void Cos(){
        int cosn;
        int k1, k2;
        k1 = sqrt(x1*x1 + y1*y1 + z1*z1);
        k2 = sqrt(x2*x2 + y2*y2 + z2*z2);
        int x, y, z, sk;
        x = x1 * x2; y = y1 * y2; z = z1 * z2;
        sk = x*y*z;
        cosn = sk / (k1*k2);
        cout << "Косинус угла равен " << cosn;
    };
    //---------------------------------------------------------------------------------------------
    void operator+ () {
        int x, y, z, a;
        cin >> a;
        cout << "1 - Умножение первого вектора" << endl;
        cout << "2 - Умножение второго вектора" << endl;
        int Choose = 1;
        while ((Choose < 3) & (Choose > 0))
        {
            cin >> Choose;
            switch (Choose) {
            case 1: x = x1 * a; y = y1 * a; z = z1 * a; cout << "Склярное произведение" << "{" << x << "; " << y << "; " << z << "}"; break;
            case 2: x = x1 * a; y = y1 * a; z = z1 * a; cout << "Склярное произведение" << "{" << x << "; " << y << "; " << z << "}"; break;
            }
        }
    };
    //---------------------------------------------------------------------------------------------
};
void Menu()
{
    setlocale(LC_ALL, "Russian");
    cout << "1 - Введите координаты " << endl;
    cout << "2 - Сложение векторов" << endl;
    cout << "3 - Вычитание векторов" << endl;
    cout << "4 - Вычисления скалярного произведения двух векторов" << endl;
    cout << "5 - Вычисление длины вектора" << endl;
    cout << "6 - Вычисление косинуса угла между векторами" << endl;
    cout << "7 - На сколько умножить" << endl;
    cout << "8 - Выход" << endl;
    cout << "#: ";
    vek aa;
    int Choose = 1;
    while ((Choose < 8) & (Choose > 0))
    {
        cin >> Choose;
        if (!cin)
        {
            cout << "Не верный ввод! ";
            cin.clear();
            system("pause");
            break;
        }
        cout << "---------------------------------------------------" << endl;
        switch (Choose) {
        case 1: aa.Vektor(); break;
        case 2: ++aa; break;
        case 3: --aa; break;
        case 4: *aa; break;
        case 5: aa.Dlin(); break;
        case 6: aa.Cos(); break;
        case 7: +aa; break;
        }
        cout << "---------------------------------------------------" << endl;
        system("pause");
    }
}
//---------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
    Menu();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2015, 19:43
Ответы с готовыми решениями:

Перегрузка операций += и -=
Объясните, пожалуйста, как правильно выполнить перегрузку операций += и -=? При...

Перегрузка операций
Уважаемые программисты! Помогите новичку! Мне нужно написать программу, в...

Перегрузка операций
#include &lt;iostream&gt; using namespace std; class chislo { public:...

Перегрузка операций
Разработайте программу на языке С++, используя пользовательский тип данных –...

Перегрузка операций!
Здравствуйте, у меня есть код (работы со строками) и нужно перегрузить...

7
Andrew Sinjagin
20 / 21 / 7
Регистрация: 04.08.2015
Сообщений: 129
06.08.2015, 20:01 2
Перегрузка оператора умножения на скаляр:
C++
1
2
3
4
5
6
7
vek operator *(double num)
{
     this->x1 = x1*num;
     this->y1 = y1*num;
     this->z1 = z1*num;
return this;
}
Добавлено через 5 минут
Сам класс векторов задать лучше иначе
C++
1
2
3
4
5
class Vektor
{
    private:
    double x,y,z;
};
Конструктор
C++
1
Vector::Vector(int x1,int y1,int z1):x=x1,y=y1,z=z1{}
1
racer888
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 33
06.08.2015, 20:07  [ТС] 3
А конструктор тут вообще нужен? Я понял что он нужен когда много элементов насоздавать надо, а тут их 2 вектора только
0
Andrew Sinjagin
20 / 21 / 7
Регистрация: 04.08.2015
Сообщений: 129
06.08.2015, 20:10 4
Оператор ++ - унарный и указанным вами способом перезагружать нельзя, пишите перегрузку именно оператора сложения:
C++
1
2
3
4
Vector operator +(Vector &vek2)
this->x = this->x+vek2->x;
this->y = this->x+vek2->y;
this->z = this->z+vek2->z;
Скалярное умножение - это просто разновидность оператора *
C++
1
2
3
4
5
6
7
double operator *(Vektor $vek2)
{
scal = this->x*vek2->x;
scal += (this->y*vek2->y);
scal += (this->z*vek2->z);
return scal;
}
Прошу прощения за возможные опечатки

Добавлено через 1 минуту
Тут лучше оперировать с понятием вектор и все операции перегружать для отдельного экземпляра
0
racer888
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 33
06.08.2015, 20:19  [ТС] 5
А почему нельзя как я сделал перегружать? Вроде работает.
0
Andrew Sinjagin
20 / 21 / 7
Регистрация: 04.08.2015
Сообщений: 129
06.08.2015, 20:26 6
Работать то работает, но хорошие преподаватели за такое бьют по рукам
0
racer888
0 / 0 / 0
Регистрация: 01.04.2013
Сообщений: 33
06.08.2015, 20:27  [ТС] 7
Если бы еще что то преподавали, а не говорили читайте книги учите сами..
0
Andrew Sinjagin
06.08.2015, 20:47     Перегрузка операций
  #8

Не по теме:

А у нас бьют, так что я конечно не навязываю свое мнение, но так просто становится понятнее что именно перегружается

0
06.08.2015, 20:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2015, 20:47
Привет! Вот еще темы с ответами:

Перегрузка операций
Добрый вечер, имеется код нахождения параллельности двух прямых или же угла...

Перегрузка операций
Добрый день форумчане, помогите решить задачку Перегрузить 8 операторов для...

Перегрузка операций
Доброго времени суток. Очень нужна помощь программистов. Есть такое задание: ...


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

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

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