if (this == &tv) { /* when t = t*/ return *this; } /*deleted all resource befere to asign*/ (*this).~TVectorCalendario(); // deep copy value this->c = new TCalendario[tv.tamano]; for (int i = 0; i < tv.tamano; i++) { this->c[i] = tv.c[i]; } this->error = tv.error; this->tamano = tv.tamano;
return *this; }
等于号运算符重载
这里的等号运算符重载就是来比较两个对象是否相等。没啥可讲的,看代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
bool TVectorCalendario::operator==(const TVectorCalendario &tv) const { if (tv.tamano != this->tamano) { returnfalse; } for (int i = 0; i < tv.tamano; i++) { if (this->c[i] != tv.c[i]) { returnfalse; } } returntrue; }
不等于号运算符重载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
bool TVectorCalendario::operator!=(const TVectorCalendario &tv) const { if (tv.tamano != this->tamano) { returntrue; } for (int i = 0; i < tv.tamano; i++) { if (this->c[i] != tv.c[i]) { returntrue; } } returnfalse; }
左括号运算符重载
也没啥可讲的,直接跳过
1 2 3 4 5 6 7 8
TCalendario &TVectorCalendario::operator[](const int i) { if (i < 1 || i > this->tamano) { returnthis->error; } returnthis->c[i - 1]; }
右括号运算符重载
这里左右重载只需要注意一个带&一个没有就好了。跳过跳过
1 2 3 4 5 6 7 8
TCalendario TVectorCalendario::operator[](const int i) const { if (i < 1 || i > this->tamano) { returnthis->error; } returnthis->c[i - 1]; }
intTVectorCalendario::Ocupadas()const { // se consideran “posiciones vacías” del vector, aquellas que contengan un TCalendario "vacío" int posiciones = this->tamano; for (int i = 0; i < this->tamano; i++) { if (this->c[i].EsVacio()) { posiciones--; } } return posiciones; }
bool TVectorCalendario::Redimensionar(const int new_size) { // si es menor o igual que 0 if(new_size <= 0) { returnfalse; } // si es igaul tamanio que en actual if(new_size == this->tamano) { returnfalse; }
// si es mayor que 0 y mayor que el tamanio actual if(new_size > 0 && new_size > this->tamano) { /*Procedimiento: se crea un ptr de Tcalendario para almacenar. Con un bucle for hasta el valor de tamanio antiguo, se almacena todas informaciones tanto como antiguo como nuevo. El de nuevo se inicia por constructor por defector que es 1/1//1900 y mensaje nullptr, Luego se libera la de antiguo y se asigna con el ptr que hemos creado principio al this. Asi con tamano tambien*/ TCalendario *new_c = newTCalendario[new_size]; for (int i = 0; i < this->tamano; i++) { new_c[i] = this->c[i]; } this->c->~TCalendario(); this->c = new_c; this->tamano = new_size; } // si es mayor que 0 y menor que tamanio actual, eliminar por la derecha if(new_size > 0 && new_size < this->tamano) { TCalendario *new_c = newTCalendario[new_size]; for (int i = 0; i < new_size; i++) { new_c[i] = this->c[i]; } this->c->~TCalendario(); this->c = new_c; this->tamano = new_size; } returntrue;