vect2 · Orden del main · one line
▶ Aprender vect2 (Orden del main · one line) paso a paso · explicación de vect2
Otras versiones: One line · Multi line · Orden del main · multi line · Cristi
Código línea a línea
Tres columnas: el código, el trozo del subject o del main que obliga a escribir esa línea, y el por qué.
vect2.hpp
| Código | Subject | Por qué |
|---|---|---|
#pragma once | Que el .hpp no se incluya dos veces. | |
| ||
#include <iostream> | printable with the << operator | std::ostream para el << que imprime. El main usa std::cout y solo incluye vect2.hpp. |
| ||
class vect2 | Create a class vect2 | La clase. |
{ | ||
private: | x e y solo los toca la propia clase. | |
int x; | vector of dimension 2 containing ints | Dimensión 2 → dos ints. Este es v[0]. |
int y; | vector of dimension 2 containing ints | Este es v[1]. |
| ||
public: | You will find a main in this directory that must work with your class. | Todo lo que usa el main. |
// vect2 v1; | vect2 v1; | |
vect2() : x(0), y(0) {} | vect2 v1; // 0, 0 | Sin nada → {0, 0}. Lista de inicialización: x(0) = x empieza en 0. |
| ||
// vect2 v2(1, 2); | vect2 v2(1, 2); | |
vect2(int a, int b) : x(a), y(b) {} | vect2 v2(1, 2); // 1, 2 | Con dos números → {1, 2}. |
| ||
// const vect2 v3(v2); vect2 v4 = v2; | const vect2 v3(v2);vect2 v4 = v2; | |
vect2(const vect2& o) : x(o.x), y(o.y) {} | const vect2 v3(v2);vect2 v4 = v2; | Copia. v4 = v2 al nacer también es copia, no operator=. |
| ||
// std::cout << "v1: " << v1 << std::endl; | std::cout << "v1: " << v1 << std::endl; | |
friend std::ostream& operator<<(std::ostream& os, const vect2& v) { return os << "{" << v.x << ", " << v.y << "}"; } | printable with the << operator std::cout << "{" << v[0] << ", " << v[1] << "}" << std::endl; | A la izquierda está cout → friend. Escribe en os (nunca std::cout) y devuelve os para encadenar. |
| ||
// v1[0] v1[1] = 12; v3[1] | v1[0]v1[1] = 12;v3[1] | |
int& operator[](int i) { return i == 0 ? x : y; } | v1[1] = 12; | Cambiar. v1[1] = 12 necesita la casilla de verdad → int &. |
int operator[](int i) const { return i == 0 ? x : y; } | v3[1] | Leer. v3 es const → hace falta la versión const. Da una copia del número. |
| ||
// v4++ ++v4 | v4++++v4 | |
vect2 operator++(int) { vect2 t(*this); ++(*this); return t; } | v4++ | v4++: me cambia, pero devuelve cómo era antes → vect2. El (int) solo lo distingue de ++v4. |
vect2& operator++() { ++x; ++y; return *this; } | ++v4 | ++v4: me sumo 1 y me devuelvo a mí → vect2 &. |
| ||
// v4-- --v4 | v4----v4 | |
vect2 operator--(int) { vect2 t(*this); --(*this); return t; } | v4-- | Igual que v4++ restando. |
vect2& operator--() { --x; --y; return *this; } | --v4 | Igual que ++v4 restando. |
| ||
// v2 += v3; | v2 += v3; | |
vect2& operator+=(const vect2& o) { x += o.x; y += o.y; return *this; } | v2 += v3;v2 += v2 += v3; | Me cambia y me devuelvo a mí. v2 += v2 += v3 encadena → vect2 &. |
| ||
// v1 -= v2; | v1 -= v2; | |
vect2& operator-=(const vect2& o) { x -= o.x; y -= o.y; return *this; } | v1 -= v2; | Igual que += restando. |
| ||
// v2 = v3 + v3 * 2; | ||
vect2& operator=(const vect2& o) { x = o.x; y = o.y; return *this; } | v2 = 3 * v2; | Me cambia → sin const. Me devuelvo a mí → vect2 &. |
vect2 operator+(const vect2& o) const { vect2 t(*this); return t += o; } | v2 = v3 + v3 *2; | Uno nuevo → vect2. Solo miro → const (v3 es const). Copia de mí + +=. |
vect2 operator*(int n) const { vect2 t(*this); return t *= n; } | (vect2(2,2) * 2 == vect2(4,4))v3 *2 | v * 2: uno nuevo. Solo miro → const (v3 es const). |
| ||
// v2 = 3 * v2; | v2 = 3 * v2; | |
friend vect2 operator*(int n, const vect2& v) { return v * n; } | v2 = 3 * v2; | 3 * v: a la izquierda hay un int, no un vect2 → no puede ser miembro. friend = función de fuera escrita aquí. |
| ||
// v1 *= 42; | v1 *= 42; | |
vect2& operator*=(int n) { x *= n; y *= n; return *this; } | multiplication by a scalarv1 *= 42; | Por un número (escalar). Me cambia y me devuelvo a mí. |
| ||
// v1 = v1 - v1 + v1; | v1 = v1 - v1 + v1; | |
vect2 operator-(const vect2& o) const { vect2 t(*this); return t -= o; } | v1 = v1 - v1 + v1; | Uno nuevo: copia de mí y -=. |
| ||
// -v2 | -v2 | |
vect2 operator-() const { return vect2(-x, -y); } | -v2 | Menos de un solo lado: uno nuevo con los dos signos cambiados. No me cambia → const. |
| ||
// v1 == v3 v1 != v3 | v1 == v3v1 != v3 | |
bool operator==(const vect2& o) const { return x == o.x && y == o.y; } | (v1 == v3) | Sí/no → bool. Iguales si x e y coinciden. |
bool operator!=(const vect2& o) const { return !(*this == o); } | (v1 != v3) | Lo contrario de ==. |
| ||
// fin del main: se destruyen todos | ||
~vect2() {} | Destructor vacío: no hay nada que liberar. | |
}; |
vect2.cpp
| Código | Subject | Por qué |
|---|---|---|
#include "vect2.hpp" | Expected files: vect2.cpp, vect2.hpp | El .cpp es obligatorio, pero todo está en el .hpp: basta con incluirlo. |