Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

преобразование типов

40K
24 ноября 2011 года
mego4el
30 / / 19.09.2010
имеется следующий код, подскажите, как можно самым простым способом сделать преобразование типов? прочитал много разной теории и никак не могу понять на практике как это.:(

Код:
#include <iostream>
class Vector
{
    double coords[3];

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=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*obj;
        return res;
    }

    Vector(double x, double y, double z)
    {
        coords[0]=x;
        coords[1]=y;
        coords[2]=z;
    }

    Vector(double x, double y, double z)
    {
        float
    }
    void show()
    {
        cout<<"("<<coords[0]<<", "<<coords[1]<<","<<coords[2]<<")\n";
    }
   
    Vector()
    {
        for (int i=0;i<3;i++)
            coords=0;
    }
};

int main()
{
    Vector a,b(2,1,3),c;
    a(1,-3,4);
    a.show();
    b.show();

    cout<<"a*b="<<a*b<<endl;
    c(a,b);
    cout<<"[ab]=";
    c.show();
    return 0;
}
14
25 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
где преобразование типов то требуется?
247
25 ноября 2011 года
wanja
1.2K / / 03.02.2003
И из какого в какой?
40K
30 ноября 2011 года
mego4el
30 / / 19.09.2010
нужны преобразования:

в string, массив, float

еще возник вопрос, как можно перегрузить унарный оператор, что бы он менял направление вектора?

спасибо!
40K
30 ноября 2011 года
mego4el
30 / / 19.09.2010
разумеется из пользовательского типа ( и обратно в него)
14
30 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
Перегрузка оператора присваивания что ли требуется?
16K
30 ноября 2011 года
asmforce
186 / / 05.01.2010
Цитата: Phodopus
Перегрузка оператора присваивания что ли требуется?



Вероятно, имеется ввиду унарный минус.

Код:
class Vector
{
 // ...

 // Вычитание векторов
 Vector operator - ( cosnt Vector &rhs )
 {
   return Vector( coords[0]-rhs.coords[0], coords[1]-rhs.coords[1], coords[2]-rhs.coords[2] );
 };

 // Вектор отрицательного направления
 Vector operator - ()
 {
   return Vector( -coords[0], -coords[1], -coords[2] );
 };
 // ...
}



Преобразование целевого типа в объект класса Vector достигается путём реализации конструктора с соответствующим параметром. ;)

Преобразование объекта (класса Vector) в целевой тип:
Код:
class Vector
{
 // ...
 operator double ()
 {
  // impl
 }

 operator std::string ()
 {
  // impl
 }

 // И т.д.
 // ...
}
40K
12 декабря 2011 года
mego4el
30 / / 19.09.2010
Код:
#include <iostream>
#include <windows.h>
#include <string.h>
using namespace std;
const int col=system("color 17");

class Vector
{
    double coords[3]; //координаты вектора

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=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*obj;
        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=0;
    }

    /*Vector operator string()
    {
        stringstream result;
        result << '(';
        for (int i=0; i < 3; ++i)
        {
            if (i>0) result << ',';
            result << coords;
        }
        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;
}


подскажите пожалуйста, что не так? преобразование в строку не работает(, и как можно сделать аналогичную реализацию только не в string а в *char ?
и как вообще реализуется преобразование обратно? (из чара обратно в мой вектор), так же интересует тот же вопрос по поводу преобразования вектора в массив и(или) флоат и назад в вектор..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог