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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
#1

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

19.12.2011, 01:31. Просмотров 2987. Ответов 6
Метки нет (Все метки)

Доброй ночи ув. форумчане. Пожалуйста помогите сделать преобразования типов, пытался что-то навоять, прочитал немало материала по этой теме, но ничего толком не получается (это видно в моих попытках преобразовать, в коде), преобразования нужны следующие:

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

Преобразование типов. Не конструктор не видит класс - C++
Здравствуйте. В коде ниже, я хотел реализовать конвертер длин. Я создал 2 класса и при помощи 2 конструкторов хотел решить проблему...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

С++ преобразование типов - C++
Есть переменная целочисленного типа например int A(например 2356).Нужно преобразовать ее к типу LPTCSTR и передать ее WinAPI функции...

преобразование типов в с++ - C++
Собственно вопрос в следующем. Распишите пожалуйста по шагам что происходит при выполнении данного кода { //... myclass x(10);...

Преобразование типов - C++
что-то не пойму почему такая ошибка код такой... .... cnetPars.parse(xml, m_creator, m_name, m_info, m_plane, m_idmap); .... ...

преобразование типов - C++
открываю файл при помощи функции fopen, имя файла нужно получить из OpenDialog! пытался вытащить путь к файлу в char, но fopen его не...

6
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
21.12.2011, 01:23  [ТС] #2
up! плз подскажите!
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
21.12.2011, 01:35 #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();
}
0
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
21.12.2011, 11:29  [ТС] #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 можно так
спасибо, а как обратно?((
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
21.12.2011, 11:42 #5
Обычноко преобразования никто не отменял:
C++
1
2
double d = 1.0;
char c = (char)d;
Таким же образом можно весь вектор перевести (только покомпонентно).
Обратное преобразование так же.

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

А чтобы из std::string обратно в double - опять покомпонентно только пользуясь std::istringstream.
0
mego4el
0 / 0 / 0
Регистрация: 19.12.2011
Сообщений: 15
21.12.2011, 22:29  [ТС] #6
C++
1
А чтобы из std::string обратно в double - опять покомпонентно только пользуясь std::istringstream.
пожалуйста, вы бы не могли привести пример?
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
21.12.2011, 23:32 #7
C++
1
2
3
4
5
std::istringstream stream("3.141");
double d;
 
stream >> d;
cout << d << endl;
1
21.12.2011, 23:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2011, 23:32
Привет! Вот еще темы с ответами:

преобразование типов - C++
Уважаемые специалисты, у меня имеется одна проблема. Есть два числа. double и float. Надо из double вычесть float. Все бы хорошо, но...

преобразование типов - C++
человеки подскажите как написать функцию преобразования типов для своего класса. надо преобразовать из моего класса, типа инт, в строку и...

Преобразование типов - C++
Подскажите пожалуйста. Есть класс для работы со строками class String // Объявление строкового класса { private:...

Преобразование типов - C++
Здравствуйте. Такая задача: Дано вещественное число r и целые неотрицательные m и n. Записать число r в строку в формате :m:n по...


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

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

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