Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

overloading operatora

[es] :: C/C++ programiranje :: C/C++ za početnike :: overloading operatora

[ Pregleda: 1659 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dontoo

Član broj: 249815
Poruke: 40
*.adsl.net.t-com.hr.



+1 Profil

icon overloading operatora18.02.2010. u 17:30 - pre 172 meseci

Operator << u ovoj vektor klasi je overloadan tako da piše "(" varijabla1 "," varijabla2 "," varijabla3 ")". Kako bi ga hipotetski de-overloadao tako da opet piše normalno. Recimo da ova vektor klasa ima još neke metode i ja sad želim da << piše te metode normalno. Što bi trebao napisati i gdje?
Code:
#include <d3dx10.h>
#include <iostream>
using namespace std;

// Overload the  "<<" operators so that we can use cout to 
// output D3DXVECTOR3 objects.

ostream& operator<<(ostream& os, D3DXVECTOR3& v)
{
    os << "(" << v.x << ", " << v.y << ", " << v.z << ")";
    return os;
}

int main()
{
    // Using constructor, D3DXVECTOR3(FLOAT x, FLOAT y, FLOAT z);
    D3DXVECTOR3 u(1.0f, 2.0f, 3.0f);

    // Using constructor, D3DXVECTOR3(CONST FLOAT *);
    float x[3] = {-2.0f, 1.0f, -3.0f};
    D3DXVECTOR3 v(x);

    // Using constructor, D3DXVECTOR3() {};
    D3DXVECTOR3 a, b, c, d, e;  

    // Vector addition: D3DXVECTOR3 operator + 
    a = u + v;

    // Vector subtraction: D3DXVECTOR3 operator - 
    b = u - v;

    // Scalar multiplication: D3DXVECTOR3 operator * 
    c = u * 10;

    // ||u||
    float L = D3DXVec3Length(&u);

    // d = u / ||u||
    D3DXVec3Normalize(&d, &u);

    // s = u dot v
    float s = D3DXVec3Dot(&u, &v);

    // e = u x v
    D3DXVec3Cross(&e, &u, &v);

    cout << "u             = " << u << endl;
    cout << "v             = " << v << endl;
    cout << "a = u + v     = " << a << endl;
    cout << "b = u - v     = " << b << endl;
    cout << "c = u * 10    = " << c << endl;
    cout << "d = u / ||u|| = " << d << endl;
    cout << "e = u x v     = " << e << endl;
    cout << "L = ||u||     = " << L << endl;
    cout << "s = u.v       = " << s << endl;

    return 0;
}
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.COOL.ADSL.VLine.Verat.NET.



+1 Profil

icon Re: overloading operatora19.02.2010. u 11:55 - pre 172 meseci
Kako to mislis "da ova vektor klasa ima još neke metode i ja sad želim da << piše te metode normalno"? Operator << je preklopljen za D3DXVECTOR3 ali te nista ne sprecava da ga preklopis za jos neki tip:
Code:

ostream& operator<<(ostream& os, String s)
{
    os << s << endl;
    return os;
}

Pojasni malo sta te muci.
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

dontoo

Član broj: 249815
Poruke: 40
*.adsl.net.t-com.hr.



+1 Profil

icon Re: overloading operatora19.02.2010. u 17:31 - pre 172 meseci
Mislio sam na ovo dolje u kodu. Za neke metode klase kad ih pozivam da output bude formatiran na jedan način a za druge metode na drugi način.
Code:
#include <iostream>

class foo
{
public:
    enum out_type {TYPE1,TYPE2,TYPE3};
    int data;
    foo(int _data = 0) : data(_data)
    {
    }
    std::ostream& print(std::ostream& os) const
    {
        if(output == TYPE1)
            return os << "This is format 1: " << data;
        else if(output==TYPE2)
            return os << "This is format 2: \"" << data << '\"';
        else if(output==TYPE3)
            return os << "This is format 3: ***" << data << "***";
        else return os;
    }
    static void SetOutputType(out_type typ)
    {
        output = typ;
    }
private:
    static out_type output;
};

foo::out_type foo::output;

std::ostream& operator<<(std::ostream& os, const foo& rhs)
{
    return rhs.print(os);
}

int main()
{
    foo bar1, bar2(10);

    foo::SetOutputType(foo::TYPE1);
    std::cout << bar1 << '\n' << bar2 << '\n' << std::endl;

    foo::SetOutputType(foo::TYPE2);
    std::cout << bar1 << '\n' << bar2 << '\n' << std::endl;

    foo::SetOutputType(foo::TYPE3);
    std::cout << bar1 << '\n' << bar2 << '\n' << std::endl;

    return 0;
}
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: overloading operatora

[ Pregleda: 1659 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.