Re: Unusual syntax (for a novice)
Hi again everyone,
Thank you all very much for your replies. You've all been very
helpful!
I can't understand why C++ has such ambiguity between a function
declaration and initialisation in this way, and I will definitely keep
to the more familiar C syntax.
I especially enjoyed the criticism of the code, produced by the guy in
charge of our computing course. Though I will be interested in any
improvements, I believe we're pretty much constrained to using the
code given. For reference, here is the complete code:
class vector3d {
// Utility class for three-dimensional vector operations
public:
vector3d() {x=0.0; y=0.0; z=0.0;}
vector3d(double a, double b, double c=0.0) {x=a; y=b; z=c;}
vector3d(int a, int b, int c=0) {x=double(a); y=double(b); z=double
(c);}
bool operator==(const vector3d& v) { if ((x==v.x)&&(y==v.y)&&
(z==v.z)) return true; else return false; }
bool operator!=(const vector3d& v) { if ((x!=v.x)||(y!=v.y)||(z!
=v.z)) return true; else return false; }
vector3d operator+(const vector3d& v) { return vector3d(x+v.x, y
+v.y, z+v.z); }
vector3d operator-(const vector3d& v) { return vector3d(x-v.x, y-
v.y, z-v.z); }
vector3d& operator+=(const vector3d& v) { x+=v.x; y+=v.y; z+=v.z;
return *this; }
vector3d& operator-=(const vector3d& v) { x-=v.x; y-=v.y; z-=v.z;
return *this; }
vector3d operator^(const vector3d& v) { return vector3d(y*v.z-z*v.y,
z*v.x-x*v.z, x*v.y-y*v.x); }
double operator*(const vector3d& v) { return (x*v.x + y*v.y
+z*v.z); }
friend vector3d operator*(const vector3d& v, const double& a)
{ return vector3d(v.x*a, v.y*a, v.z*a); }
friend vector3d operator*(const double& a, const vector3d& v)
{ return vector3d(v.x*a, v.y*a, v.z*a); }
vector3d& operator*=(const double& a) { x*=a; y*=a; z*=a; return
*this; }
vector3d operator/(const double& a) { return vector3d(x/a, y/a, z/
a); }
vector3d& operator/=(const double& a) { x/=a; y/=a; z/=a; return
*this; }
double abs2() { return (x*x + y*y + z*z); }
double abs() { return sqrt(this->abs2()); }
vector3d norm() { double s(this->abs()); if (s==0) return *this;
else return vector3d(x/s, y/s, z/s); }
double x, y, z;
private:
};
Nick
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]