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

преобразование типов (класс вектор) C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
19.12.2011, 01:31     преобразование типов (класс вектор) C++ #1
Доброй ночи ув. форумчане. Пожалуйста помогите сделать преобразования типов, пытался что-то навоять, прочитал немало материала по этой теме, но ничего толком не получается (это видно в моих попытках преобразовать, в коде), преобразования нужны следующие:

- Vector в Char (представить вектор ввиде символов x,y,z)
- Vector в String (представить вектор ввиде символов x,y,z)
- Vector в float
- Vector в double

так же из этих типов обратно что бы можно было преобразовать допустим из char в Vector, String в Vector, float в Vector ... etc..

т.е. преобразования в обе стороны, из и в.

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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
const int col=system("color 17");
 
class Vector
{
    double coords[3]; //координаты вектора
    char cX[1], cY[1], cZ[1];
 
public:
    //перегрузка оператора квадратных скобок, для индексации обьектов
    double &operator[](int i)
    {
        int k=i%3;
        return coords[k];
    }
    //перегрузка скобок, для присваивания координатам значений
    Vector operator() (double x, double y, double z)
    {
        coords[0]=x;
        coords[1]=y;
        coords[2]=z;
        return *this;
    }
    //перегрузка скобок, для вычисления вект. произведения
    Vector operator () (Vector a, Vector b)
    {
        for (int i=0;i<3;i++)
            coords[i]=a[i+1]*b[i+2]-a[i+2]*b[i+1];
        return *this;
    }
    //перегрузка звездочки, для вычисления скалярного произведения
    double operator* (Vector obj)
    {
        double res=0;
        for (int i=0;i<3;i++)
            res+=coords[i]*obj[i];
        return res;
    }
 
    Vector(double x, double y, double z)
    {
        coords[0]=x;
        coords[1]=y;
        coords[2]=z;
    }
    //в массив
    operator double*()
    { 
        return coords;
    }    
 
    // вычитание векторов
    Vector operator - (Vector &rhs)
    {
        return Vector(coords[0]-rhs.coords[0], coords[1]-rhs.coords[1], coords[2]-rhs.coords[2]);
    }
 
    //метод для отображения координат
    void show()
    {
        cout<<"("<<coords[0]<<", "<<coords[1]<<","<<coords[2]<<")\n";
    }
    
    Vector()
    {
        for (int i=0;i<3;i++)
            coords[i]=0;
    }
 
    Vector (Vector &vect){coords[0]=vect.cX[1]; coords[1]=vect.cY[1]; coords[2]=vect.cZ[1];}
    
    /*operator char*()
    {
        double i=5;
        char d1=char(i); //явное double к char
        char d2=i; //неявное
        Vector vect(5,2,1); 
        char d3=char(vect); //явное Vector в char
        char d4=vect; //неявное
        return coords;
    }
 
    operator string()
    {
        stringstream result; 
        result<<'(';
        for (int i=0; i < 3; ++i) 
        {
            if (i>0) result << ',';
            result<<coords[i];
        }
        result<<')';
        return result.str();
    }*/
 
        Vector operator - ()
    {
        return Vector( -coords[0], -coords[1], -coords[2] ); //отриц направление
    };
 
    Vector operator++ (int)
    {
        double x;
        double y;
        double z;
        x=+1;
        y=+2;
        z=+3;
        return *this;
    }
};
 
int main()
{
    Vector a,b,c,m1,m2,st,v;
    //вычитание
    m1(3,3,3);
    m2(1,2,1);
    cout<<"m1 = "; m1.show();
    cout<<"m2 = "; m2.show();
    m1=m1-m2;
    cout<<"m1-m2 = "; m1.show();
    //в указатель на double, указывающий на начало мсассива
    cout<<"mas = ";
    for (double *p = st; p != st+3; ++p)
    {
        cout<<*p<<" ";
        st(1,2,3);
    }
    cout<<endl;
    //в строку
    //v(1,2,3);
    //string str = v;
    //cout<<"vector to string = "<<"(x,y,z)"<<endl;
    //----
    a(1,-3,4);
    b(2,1,3);
    cout<<"a = "; a.show();
    cout<<"b = "; b.show();
    cout<<"a*b="<<a*b<<endl; //скалярное произвед
    c(a,b); //векторное произвед
    cout<<"[ab]=";
    c.show();
    return 0;
}
очень благодарен всем кто хоть как нибудь поможет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2011, 01:31     преобразование типов (класс вектор) C++
Посмотрите здесь:

Преобразование типов C++
C++ преобразование типов
C++ Преобразование типов
C++ преобразование типов
преобразование типов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
21.12.2011, 01:23  [ТС]     преобразование типов (класс вектор) C++ #2
up! плз подскажите!
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
21.12.2011, 01:35     преобразование типов (класс вектор) C++ #3
Вектор в String ещё могу представить, но вектор в char, float, int... Как 3 элемента представить одним? Может быть, посчитать норму или ещё что-нибудь?

Добавлено через 2 минуты
Чтобы в String можно так
C++
1
2
3
4
5
6
std::strinrg ToString() 
{
    std::ostringstream stream(std::ostringstream::out);
    //stream << заносим координаты как в обычном cout;
    return stream.str();
}
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
21.12.2011, 11:29  [ТС]     преобразование типов (класс вектор) C++ #4
Вектор в String ещё могу представить, но вектор в char, float, int... Как 3 элемента представить одним? Может быть, посчитать норму или ещё что-нибудь?
вектор на самом деле "псевдо вектор", то есть у него в данном случае, даже нет направления, по сути дела это просто три дабла X,Y,Z.

нет, не одним! допустим вектор задан как double x=1, y=2, z=3, и его нужно преобразовать операторной функцией в char*, в итоге на выходе должно получится преобразование, чтото вроде char x=X, y=Y, z=Z, т.е. просто в символы перевести вектор. (без всяких логических убеждений). но я не знаю как расписать сие преобразование, без использования каких либо static_cast и тп.

так же само в float, только что в дабле - будет то же число в флоате, тут должно быть проще, но я не понимаю как это записать..

и самое главное нужно сделать преобразования из этих стандартных типов, обратно в пользовательский Vector


Чтобы в String можно так
спасибо, а как обратно?((
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
21.12.2011, 11:42     преобразование типов (класс вектор) C++ #5
Обычноко преобразования никто не отменял:
C++
1
2
double d = 1.0;
char c = (char)d;
Таким же образом можно весь вектор перевести (только покомпонентно).
Обратное преобразование так же.

Вопрос лишь в том, что размера char не хватит для хранения double.

А чтобы из std::string обратно в double - опять покомпонентно только пользуясь std::istringstream.
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
21.12.2011, 22:29  [ТС]     преобразование типов (класс вектор) C++ #6
C++
1
А чтобы из std::string обратно в double - опять покомпонентно только пользуясь std::istringstream.
пожалуйста, вы бы не могли привести пример?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2011, 23:32     преобразование типов (класс вектор) C++
Еще ссылки по теме:

Преобразование типов C++
Преобразование типов. Не конструктор не видит класс C++
C++ Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с произвольным кол-во элементов.

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

Или воспользуйтесь поиском по форуму:
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
21.12.2011, 23:32     преобразование типов (класс вектор) C++ #7
C++
1
2
3
4
5
std::istringstream stream("3.141");
double d;
 
stream >> d;
cout << d << endl;
Yandex
Объявления
21.12.2011, 23:32     преобразование типов (класс вектор) C++
Ответ Создать тему
Опции темы

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