Original Post
I'm creating a POINT and VECTOR struct with overloading operators for point and vector arithmetic. Here are the declarations for POINT and VECTOR structs: The POINT struct The VECTOR struct I want to get the difference of two points to result a vector like so: VECTOR u = q - p, where p, q are POINT structs. How can I restrict the user to assign any arithmetic operation method except for operator- method for the VECTOR struct?
namespace Math
{
typedef struct _Point
{
float mX, mY, mZ;
// constructor
_Point(void);
// overloaded constructor
_Point(const float, const float, const float);
// overloaded constructor
_Point(const _Point &);
// assignment operators
_Point &operator= (const _Point &);
_Point &operator+= (const _Point &);
_Point &operator+= (const _Vector &);
_Point &operator-= (const _Point &);
_Point &operator*= (const _Point &);
_Point &operator*= (const float);
// unary operators
_Point operator- (void);
_Point operator+ (void);
// binary operators
_Point operator+ (const _Point &) const;
_Point operator+ (const _Vector &) const;
friend _Point operator+ (const _Vector &, const _Point &);
_Point operator- (const _Point &) const;
_Point operator* (const _Point &) const;
_Point operator* (const float) const;
friend _Point operator* (const float, const _Point &);
// insertion operator
friend std::ostream &operator<< (std::ostream &, const _Point &);
}POINT;
}
namespace Math
{
typedef struct _Vector
{
float mX, mY, mZ;
// constructor
_Vector(void);
// overloaded constructor
_Vector(const float, const float, const float);
// overloaded constructor
_Vector(const _Vector &);
// assignment operators
_Vector &operator= (const _Vector &);
_Vector &operator+= (const _Vector &);
_Vector &operator*= (const _Vector &);
_Vector &operator*= (const float);
_Vector &operator-= (const _Vector &);
// unary operators
_Vector operator- (void);
_Vector operator+ (void);
// binary operators
_Vector operator+ (const _Vector &) const;
_Vector operator* (const _Vector &) const;
_Vector operator* (const float) const;
friend _Vector operator* (const float, const _Vector &);
_Vector operator- (const _Vector &) const;
// insertion operator
friend std::ostream &operator<< (std::ostream &, const _Vector &);
}VECTOR;
}