vect2 · One line

▶ Aprender vect2 (One line) paso a paso · explicación de vect2

Otras versiones: Multi line · Orden del main · one 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ódigoSubjectPor qué
#pragma onceQue el .hpp no se incluya dos veces.
#include <iostream>printable with the << operatorstd::ostream para el << que imprime. El main usa std::cout y solo incluye vect2.hpp.
class vect2Create a class vect2La clase.
{
private:x e y solo los toca la propia clase.
int x;vector of dimension 2 containing intsDimensión 2 → dos ints. Este es v[0].
int y;vector of dimension 2 containing intsEste es v[1].
public:You will find a main in this directory that must work with your class.Todo lo que usa el main.
// ---------- forma canónica ----------
vect2() : x(0), y(0) {}vect2 v1; // 0, 0Sin nada → {0, 0}. Lista de inicialización: x(0) = x empieza en 0.
vect2(int a, int b) : x(a), y(b) {}vect2 v2(1, 2); // 1, 2Con dos números → {1, 2}.
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=.
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() {}Destructor vacío: no hay nada que liberar.
// ---------- [] ----------
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.
int& operator[](int i) { return i == 0 ? x : y; }v1[1] = 12;Cambiar. v1[1] = 12 necesita la casilla de verdad → int &.
// ---------- + ----------
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 &.
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++() { ++x; ++y; return *this; }++v4++v4: me sumo 1 y me devuelvo a mí → vect2 &.
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-=(const vect2& o) { x -= o.x; y -= o.y; return *this; }v1 -= v2;Igual que += restando.
vect2 operator-(const vect2& o) const { vect2 t(*this); return t -= o; }v1 = v1 - v1 + v1;Uno nuevo: copia de mí y -=.
vect2& operator--() { --x; --y; return *this; }--v4Igual que ++v4 restando.
vect2 operator--(int) { vect2 t(*this); --(*this); return t; }v4--Igual que v4++ restando.
vect2 operator-() const { return vect2(-x, -y); }-v2Menos de un solo lado: uno nuevo con los dos signos cambiados. No me cambia → const.
// ---------- * ----------
vect2& operator*=(const vect2& o) { x *= o.x; y *= o.y; return *this; }Extra: el main no lo usa. Multiplica componente a componente.
vect2 operator*(const vect2& o) const { vect2 t(*this); return t *= o; }Extra: el main no lo usa. Copia de mí y *=.
vect2& operator*=(int n) { x *= n; y *= n; return *this; }multiplication by a scalar
v1 *= 42;
Por un número (escalar). Me cambia y me devuelvo a 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).
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í.
// ---------- == != ----------
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 ==.
// ---------- << ----------
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.
};
vect2.cpp
CódigoSubjectPor qué
#include "vect2.hpp"Expected files: vect2.cpp, vect2.hppEl .cpp es obligatorio, pero todo está en el .hpp: basta con incluirlo.