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

пожалуйста подскажите как реализовать перегрузку операторов - C++

Восстановить пароль Регистрация
 
fuzobe
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 15
10.04.2013, 01:42     пожалуйста подскажите как реализовать перегрузку операторов #1
Векторы: полярные координаты (длина и угол), конструктор по умолчанию, конструктор с параметрами, конструктор копирования, метод поворота вектора на любой угол, метод вывода вектора, перегрузка операторов деления, присвоение, добавление.
Нужно описать класс, три объекта B1, B2, B3, используя различные конструкторы, "уменьшить" в 2 раза объект B2, "развернуть" объект B3 на 45 градусов, "развернуть" объекты B2, B3 и результат "поместить" к объекту B1; результат действий вывести на экран.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2013, 01:42     пожалуйста подскажите как реализовать перегрузку операторов
Посмотрите здесь:

как реализовать перегрузку опрератора "="? C++
Подскажите как делать,пожалуйста C++
Создать 2 объекта a и b, разработанного класса – символьная строка, реализовать перегрузку операции >= C++
Создать класс "Дата" с конструкторами, деструктором, указанными методами. Выполнить перегрузку указанных операторов C++
C++ Не получается реализовать перегрузку операторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Warezovvv
 Аватар для Warezovvv
9 / 9 / 2
Регистрация: 09.12.2012
Сообщений: 219
10.04.2013, 09:03     пожалуйста подскажите как реализовать перегрузку операторов #2
http://habrahabr.ru/post/132014/
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.04.2013, 11:19     пожалуйста подскажите как реализовать перегрузку операторов #3
fuzobe, можно попробовать сделать. Нужны детали.
fuzobe
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 15
10.04.2013, 11:31  [ТС]     пожалуйста подскажите как реализовать перегрузку операторов #4
Цитата Сообщение от alsav22 Посмотреть сообщение
fuzobe, можно попробовать сделать. Нужны детали.
у меня есть только две проблемы. Первая я не знаю как реализовать уменьшение вектора в 2 раза, а вторая я тоже не знаю как можно вектор развернуть на 45 градусов.
И еще как эти все действия расчета сделать через перегрузку.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2013, 11:35     пожалуйста подскажите как реализовать перегрузку операторов #5
Цитата Сообщение от fuzobe Посмотреть сообщение
Первая я не знаю как реализовать уменьшение вектора в 2 раза,
Цитата Сообщение от fuzobe Посмотреть сообщение
а вторая я тоже не знаю как можно вектор развернуть на 45 градусов.
Цитата Сообщение от fuzobe Посмотреть сообщение
Векторы: полярные координаты (длина и угол),
По-моему, ответ очевиден из постановки задачи.
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
10.04.2013, 11:37     пожалуйста подскажите как реализовать перегрузку операторов #6
Цитата Сообщение от fuzobe Посмотреть сообщение
Векторы: полярные координаты (длина и угол),
логично предположить, что уменьшив длину в 2 раза мы получим вектор вдвое короче (уменьшен в два раза).
точно так же поворот вектора = изменение угла (+45 или -45 в зависимости от направления против или по часовой стрелке)
в итоге, на мой взгляд, задание сводится к двум банальным сеттерам (учитывая, что векторы заданы в полярной системе).
fuzobe
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 15
10.04.2013, 14:12  [ТС]     пожалуйста подскажите как реализовать перегрузку операторов #7
alsav22, у меня есть только две проблемы. Первая я не знаю как реализовать уменьшение вектора в 2 раза, а вторая я тоже не знаю как можно вектор развернуть на 45 градусов.
И еще как эти все действия расчета сделать через перегрузку.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2013, 14:32     пожалуйста подскажите как реализовать перегрузку операторов #8
Цитата Сообщение от fuzobe Посмотреть сообщение
у меня есть только две проблемы
fuzobe, откуда вообще тут проблемы могут взяться?
C++
1
2
3
4
5
struct PolarVector
{
   double r;
   double angle;
};
Проблема изменить поля структуры тривиальными математическими операциями?
fuzobe
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 15
10.04.2013, 15:26  [ТС]     пожалуйста подскажите как реализовать перегрузку операторов #9
Tulosba, спасибо большое я просто недавно начал изучать С++
я так понял этот тип мне нужно объявить при описании класса.
а дальше через методы делать расчет векторов
Извините если говорю глупость.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2013, 15:38     пожалуйста подскажите как реализовать перегрузку операторов #10
Цитата Сообщение от fuzobe Посмотреть сообщение
я так понял этот тип мне нужно объявить при описании класса.
Об этом же прямо сказано в задании:
Цитата Сообщение от fuzobe Посмотреть сообщение
Векторы: полярные координаты (длина и угол)
Цитата Сообщение от fuzobe Посмотреть сообщение
а дальше через методы делать расчет векторов
Угу. Короче говоря, начинайте писать код. Будет не понятно - пишите на форум.
fuzobe
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 15
15.05.2013, 19:45  [ТС]     пожалуйста подскажите как реализовать перегрузку операторов #11
Tulosba,
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
#include "stdafx.h"
#include<iostream>
#include "math.h"
 
using namespace std;
class Vektor
{
private:
    int x;
    int y;
public:
    
            
    Vektor(int _x,int _y)
    {
        x=_x;
        y=_y;
    }
    Vektor()
    {
        x=0;
        y=0;
    }
    Vektor (const Vektor &obj)
    {
        x=obj.x;
        y=obj.y;
    }
 
    void show()
    {
        cout << "<"<<x<<"."<<y<<"}";
    }
    double Angle_x()
    {
        int x= 5;
        int y= 6;
        return ((x*0.7071067811865)+(y*0.7071067811865));
        
    }
    double Angle_y()
    {
        int x= 5;
        int y= 6;
        
        return ((y*0.7071067811865)-(x*0.7071067811865));       
    }   
 
    Vektor operator /(const int &x) 
    {
        Vektor temp;
        temp.x=x/2;
        temp.y=y/2;
        return temp;
    }
    Vektor operator +(Vektor obj)
    {
        Vektor temp;
        temp.x=x + obj.x;
        temp.y=y + obj.y;
        return temp;
    }
    Vektor operator = (const Vektor &obj)
    {
        x=obj.x;
        y=obj.y;
        return *this;
 
    }
    
};
 
 
int main()
{
    Vektor t;
    t.Angle_x();
    t.Angle_y();
    Vektor B1(2,8);
    Vektor B2(3,4);
    Vektor B3();    
    B1 = B3;    
    B2 = B2 /2;
    B3 = B2+B3;
    B1.show();
    B2.show();
    B3.show();
    cin.get();
 
    
    return 0;
}
Вот что у меня получилось но у меня не получается записать в объект В3 координаты перевернутого вектора.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.05.2013, 11:36     пожалуйста подскажите как реализовать перегрузку операторов #12
fuzobe, 83 строка должна быть такой:
C++
1
Vektor B3;
65 такой:
C++
1
Vektor& operator = (const Vektor &obj)
Копирующий конструктор можно вообще убрать.
А конструкторы с параметрами и без параметров заменить одним:
C++
1
Vektor(int x=0, int y=0) : x(x), y(y) { }
fuzobe
0 / 0 / 0
Регистрация: 10.04.2013
Сообщений: 15
16.05.2013, 21:25  [ТС]     пожалуйста подскажите как реализовать перегрузку операторов #13
Tulosba, я все сделал так как вы мне подсказали, но у меня теперь объект В3 принимает значения 0,0
получается не работает метод поворота вектора на 45 градусов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2013, 22:45     пожалуйста подскажите как реализовать перегрузку операторов
Еще ссылки по теме:

C++ Реализовать для объектов данного класса перегрузку операции
C++ Реализовать для класса перегрузку операции []
Реализовать перегрузку оператора индексации C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.05.2013, 22:45     пожалуйста подскажите как реализовать перегрузку операторов #14
fuzobe, проверяйте. Вроде не налагал.
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
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
 
class Vector
{
private:
    double r;
    double a;
public:
    Vector(double r=0, double a=0) : r(r), a(a) { } 
 
    friend std::ostream& operator<<( std::ostream& o, const Vector& v )
    {
        o << "r=" << v.r << " : a=" << v.a;
        return o;
    }
 
    friend Vector operator/(const Vector& v, double x) 
    {
        Vector temp = v;
        temp.r /= x;
        return temp;
    }
 
    friend Vector operator+(const Vector& v1, const Vector& v2 )
    {
        double x = v1.r * cos( v1.a / 180 * M_PI ) + v2.r * cos( v2.a / 180 * M_PI );
        double y = v1.r * sin( v1.a / 180 * M_PI ) + v2.r * sin( v2.a / 180 * M_PI );
        return Vector( sqrt( x*x + y*y ), atan2( y, x ) * 180 / M_PI );
    }
 
    Vector& rotate( double angle )
    {
        a += angle;
        return *this;
    }
 
    Vector& reverse()
    {
        return rotate( 180 );
    }
};
 
int main()
{
    Vector B1; // Используется конструктор по умолчанию
    Vector B2(3, 30); // Используется конструктор с параметрами
    Vector B3(B2); // Используется копирующий конструктор   
    B2 = B2 / 2; // Уменьшаем 
    
    B3.rotate( 45 ); // Поворачиваем по часовой стрелке
    B2.reverse(); // Разворачиваем один
    B3.reverse(); // Разворачиваем другой
    
    B1 = B1 + B3; // Складываем и сохраняем
 
    // Выводим всё
    std::cout << B1 << std::endl << 
        B2 << std::endl <<
        B3 << std::endl;
 
    std::system( "pause" );
    
    return 0;
}
Yandex
Объявления
16.05.2013, 22:45     пожалуйста подскажите как реализовать перегрузку операторов
Ответ Создать тему
Опции темы

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