struct Vector3 { int x, y, z; Vector3() {} Vector3(int x, int y, int z) : x(x), y(y), z(z) {} };
Vector3 v1(10, 10, 10), v2(20, 20, 25), v3; //...
v1 = v2;
Vector3 operator = (Vector3 v1) { return Vector3(this->x = v1.x, this->y = v1.y, this->z = 0); }
Vector3 operator = (Vector3 v1) { this->x = v1.x, this->y = v1.y, this->z = 0; return *this; }
// (&v1) Vector3 operator = (Vector3 &v1) { return Vector3(this->x = v1.x, this->y = v1.y, this->z = 0); }
// Vector3 operator = (Vector3 &v) { // , = vx = 10; vy = 50; // = return Vector3(this->x = vx, this->y = vy, this->z = 0); }
// Vector3 operator = (const Vector3 &v) { // , = //vx = 10; vy = 50; // = return Vector3(this->x = vx, this->y = vy, this->z = 0); }
// , Vector3& operator = (const Vector3 &v) { return Vector3(this->x = vx, this->y = vy, this->z = 0); }
// this->x = ... ( ) return Vector3(this->x = vx, this->y = vy, this->z = 0); // ? // ? ( ) return Vector3(vx, vy, 0);
// void () void operator = (const Vector3 &v1) { this->x = v1.x, this->y = v1.y, this->z = 0; }
v1 = (v2 = v3); // void operator + //v1 = void? - v1 = (v2 + v3);
v1(10, 10, 10); v2(15, 15, 15); v3; v3 = (v1 + v2); cout << v1; // (10, 10, 10), (12, 13, 14) cout << v2; // (15, 15, 15), (50, 50, 50) cout << v3; // (25, 25, 25), ,
Vector3 operator + (Vector3 &v1, Vector3 &v2) { v1.x += 2, v1.y += 13, v1.z += 4; v2(50, 50, 50); return Vector3(/*, */); }
Vector3 operator = (const Vector3 &v1) { // , //( /) if (&v1 == this) return *this; return Vector3(this->x = v1.x, this->y = v1.y, this->z = v1.z); }
Vector3 operator + (const Vector3 &v1); // Vector3 operator - (const Vector3 &v1); // // : //++, --, !, ~, [], *, &, (), (type), new, delete
Vector3 operator + (const Vector3 &v1, const Vector3 &v2); // - ! Vector3 operator - (const Vector3 &v1, const Vector3 &v2); // - ! // : //*, /, %, ==, !=, >, <, >=, <=, &&, ||, &, |, ^, <<, >>, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, ->, ->*, (,), ","
struct Vector3 { //, , ... // , = Vector3 operator = (Vector3 &v1); }; // // "Vector3::", , // Vector3 - Vector3 Vector3::operator = (Vector3 &v1); { return Vector3(this->x = v1.x, this->y = v1.y, this->z = 0); }
struct Vector3 { friend Vector3 operator = (Vector3 &v1); }; //
struct Vector2 { // Vector2 Vector3 Vector2 operator + (Vector3 v3) {/*...*/} } // Vector2 Vector2 Vector3 vec2 = vec2 + vec3; //Ok vec2 = vec3 + vec2; //
struct Vector2 { // Vector2 Vector3 Vector2 operator + (Vector3 v3) {/*...*/} // , Vector3 friend Vector2 operator + (Vector3 v3, Vector2 v2) {/*...*/} } vec2 = vec2 + vec3; //Ok vec2 = vec3 + vec2; //Ok
Vector3 operator + (const Vector3 &v1, const Vector3 &v2) { return Vector3(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z); }
Vector3 Vector3::operator ++ (int) { return Vector3(this->x++, this->y++, this->z++); }
Vector3 Vector3::operator ++ () { return Vector3(++this->x, ++this->y, ++this->z); }
Vector3 operator * (const Vector3 &v1, const int i) { return Vector3(v1.x * i, v1.y * i, v1.z * i); }
// , Vector3 operator + (const Vector3 &v) { return v; }
// -1 Vector3 operator - (const Vector3 &v) { return Vector3(vx * -1, vy * -1, vz * -1); }
Vector3 operator += (Vector3 &v1, const Vector3 &v2) { return Vector3(v1.x = v1.x + v2.x, v1.y = v1.y + v2.y, v1.z = v1.z + v2.z); }
const bool operator < (const Vector3 &v1, const Vector3 &v2) { double vTemp1(sqrt(pow(v1.x, 2) + pow(v1.y, 2) + pow(v1.z, 2))); double vTemp2(sqrt(pow(v2.x, 2) + pow(v2.y, 2) + pow(v2.z, 2))); return vTemp1 < vTemp2; } const bool operator == (const Vector3 &v1, const Vector3 &v2) { if ((v1.x == v2.x) && (v1.y == v2.y) && (v1.z == v2.z)) return true; return false; } // != const bool operator != (const Vector3 &v1, const Vector3 &v2) { return !(v1 == v2); }
// - true Vector3::operator bool() const { if (*this != Vector3(0, 0, 0)) return true; return false; } // int - Vector3::operator int() const { return int(this->x + this->y + this->z); }
// , bool const bool operator ! (Vector3 &v1) { return !(bool)v1; } const bool operator && (Vector3 &v1, Vector3 &v2) { return (bool)v1 && (bool)v2; }
// ( -1, ) const Vector3 operator ~ (Vector3 &v1) { return Vector3(~(v1.x), ~(v1.y), ~(v1.z)); } const Vector3 operator & (const Vector3 &v1, const Vector3 &v2) { return Vector3(v1.x & v2.x, v1.y & v2.y, v1.z & v2.z); } // (xor) const Vector3 operator ^ (const Vector3 &v1, const Vector3 &v2) { return Vector3(v1.x ^ v2.x, v1.y ^ v2.y, v1.z ^ v2.z); } // ostream& operator << (ostream &s, const Vector3 &v) { s << '(' << vx << ", " << vy << ", " << vz << ')'; return s; } // ( ) istream& operator >> (istream &s, Vector3 &v) { std::cout << " Vector3.\nX:"; std::cin >> vx; std::cout << "\nY:"; std::cin >> vy; std::cout << "\nZ:"; std::cin >> vz; std::cout << endl; return s; }
Vector3 operator ^= (Vector3 &v1, Vector3 &v2) { v1(Vector3(v1.x = v1.x ^ v2.x, v1.y = v1.y ^ v2.y, v1.z = v1.z ^ v2.z)); return v1; } // ostream& operator <<= (ostream &s, Vector3 &v) { s.clear(); s << '(' << vx << ", " << vy << ", " << vz << ')'; return s; }
// ! [] , // () int Vector3::operator [] (int n) { try { if (n < 3) { if (n == 0) return this->x; if (n == 1) return this->y; if (n == 2) return this->z; } else throw ": "; } catch (char *str) { cerr << str << endl; } return NULL; } // Vector3 Vector3::operator () (Vector3 &v1, Vector3 &v2) { return Vector3(v1 & v2); }
// 1 void* Vector3::operator new(size_t v) { void *ptr = malloc(v); if (ptr == NULL) throw std::bad_alloc(); return ptr; } // void* Vector3::operator new[](size_t v) { void *ptr = malloc(sizeof(Vector3) * v); if (ptr == NULL) throw std::bad_alloc(); return ptr; } void Vector3::operator delete(void* v) { free(v); } void Vector3::operator delete[](void* v) { free(v); }
const Vector3 operator , (Vector3 &v1, Vector3 &v2) { return Vector3(v1 * v2); } v1 = (Vector3(10, 10, 10), Vector3(20, 25, 30)); // : (200, 250, 300)
Source: https://habr.com/ru/post/308890/
All Articles