Objektovo orientované vektory v C++
potreboval by som naprogramovať nejakú funkciu/konštruktor k hlavičkovému súboru vektoris.h (nie moja tvorba) dole aby bolo možné už deklarované a definované vektory re-inicializovať.Je to vôbec možné? Napr.
Vector3D vek(1,2,3); //toto je OK, funguje to cez konštruktory
vek(2,4,3); //toto potrebujem nejak naprogramovať. cieľom je aby hodnoty 1 2 3 v už existujúcom vektore vek boli zmenené na 2 4 3
#ifndef _VECTOR
#define _VECTOR
#include <math.h>
class Vector3D
{
private:
double x, y, z;
public:
//default constructor
Vector3D(double X , double Y , double Z )
{
x = X;
y = Y;
z = Z;
}
~Vector3D(){};
//calculate and return the magnitude of this vector
double GetMagnitude()
{
return sqrtf(x * x + y * y + z * z);
}
//multiply this vector by a scalar
Vector3D operator*(double num) const
{
return Vector3D(x * num, y * num, z * num);
}
//pass in a vector, pass in a scalar, return the product
friend Vector3D operator*(double num, Vector3D const &vec)
{
return Vector3D(vec.x * num, vec.y * num, vec.z * num);
}
//add two vectors
Vector3D operator+(const Vector3D &vec) const
{
return Vector3D(x + vec.x, y + vec.y, z + vec.z);
}
//subtract two vectors
Vector3D operator-(const Vector3D &vec) const
{
return Vector3D(x - vec.x, y - vec.y, z - vec.z);
}
//normalize this vector
void normalizeVector3D()
{
double magnitude = sqrtf(x * x + y * y + z * z);
x /= magnitude;
y /= magnitude;
z /= magnitude;
}
//calculate and return dot product
double dotVector3D(const Vector3D &vec) const
{
return x * vec.x + y * vec.y + z * vec.z;
}
//calculate and return cross product
Vector3D crossVector3D(const Vector3D &vec) const
{
return Vector3D(y * vec.z - z * vec.y,
z * vec.x - x * vec.z,
x * vec.y - y * vec.x);
}
void setX(double);
void setY(double);
void setZ(double);
double getX();
double getY();
double getZ();
};
#endif
Pre pridávanie komentárov sa musíte prihlásiť.
Ak som spravne pochopil, tak chces v uz vytvorenom objekte zmenit private double x, y, z; podla parametrov predavanym funkcii vek().
vek(4,5,6);
Cieľom je zmeniť súradnice toho vektora vek, ktorý som predtým vytvoril pomocou.
Vector3D vek;
void MyClass::operator()(int a, int b, int c)
{
this.x = a;
this.y = b;
this.z = c;
}
Namiesto this.x, this.y, this.z som však musel použiť x,y,z (zvláštne). Už to však fachčí.
a vobec pretazovat operator() je dobra kravina, ked si mozes radsej napisat funkciu changeValues a potom volat
xy.changeValues(5,7,8);
miesto
xy(5,7,8);
tak bude aspon kazdemu jasne, co ten kod ma robit