El puntero 'this'
Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 7 de 104.
En C++, this es un puntero al objeto actual. Utilice this-> para acceder a los miembros, especialmente cuando los nombres de los parámetros coinciden con los nombres de los miembros.
Sin this, el parámetro oculta al miembro
void Player::setName(std::string name) {
name = name; // ¡Asigna el parámetro a sí mismo! El miembro no cambia.
}Uso de this-> para asignar valores correctamente
void Player::setName(std::string name) {
this->name = name; // Asigna el parámetro al miembro
}Uso de this-> en métodos
std::string Player::getStatus() {
return this->name + " - Score: " + std::to_string(this->score);
}El puntero this siempre apunta a la instancia del objeto actual. A diferencia de Java y C#, donde this es una referencia, en C++ es un puntero, por lo que se utiliza -> en lugar de . para acceder a los miembros.
Desafío
IntermedioImplementa los métodos de la clase Player usando this-> para distinguir entre miembros y parámetros con el mismo nombre:
- Métodos setter: usa
this->para asignar parámetros a los miembros getStatus(): usathis->para acceder a los miembros, devuelve"<name> - Score: <score>, Level: <level>"
Hoja de referencia
En C++, this es un puntero al objeto actual. Usa this-> para acceder a los miembros, especialmente cuando los nombres de los parámetros coinciden con los nombres de los miembros.
Sin this, el parámetro oculta al miembro:
void Player::setName(std::string name) {
name = name; // ¡Asigna el parámetro a sí mismo! El miembro no cambia.
}Usando this-> para asignar valores correctamente:
void Player::setName(std::string name) {
this->name = name; // Asigna el parámetro al miembro
}Usando this-> en métodos:
std::string Player::getStatus() {
return this->name + " - Score: " + std::to_string(this->score);
}El puntero this siempre apunta a la instancia del objeto actual. A diferencia de Java y C#, donde this es una referencia, en C++ es un puntero, por lo que se usa -> en lugar de . para acceder a los miembros.
Pruébalo tú mismo
#include <iostream>
#include "Player.h"
int main() {
std::string name;
int score, level;
std::getline(std::cin, name);
std::cin >> score >> level;
Player player;
player.setName(name);
player.setScore(score);
player.setLevel(level);
std::cout << "Name: " << player.name << std::endl;
std::cout << "Score: " << player.score << std::endl;
std::cout << "Level: " << player.level << std::endl;
std::cout << player.getStatus() << std::endl;
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosConstrucción y compilación en C++Archivos de cabecera y archivos fuenteNamespaces y alcanceIntroducción a OOP en C++Clases vs ObjetosEl puntero 'this'Métodos (Funciones miembro)Atributos (Miembros de datos)Conceptos básicos de Ctors y DtorsResumen - Calculadora simple4Propiedades de clase
Miembros de instancia vs. estáticosGetters y SettersFunciones miembro constPalabra clave mutableMétodos y variables estáticosFunciones y clases amigasResumen - Gestor de cuentas bancarias7Herencia
Herencia básicaNiveles de acceso en la herenciaOrden de llamada de Ctor y DtorSobrescritura de métodosFunciones virtuales y VTableHerencia múltipleHerencia virtualResumen - Jerarquía de empleados2Gestión de memoria
Memoria Stack vs HeapPunteros y referenciasMemoria dinámica (new/delete)Punteros inteligentes en C++RAII en C++Resumen - Gestor de arrays dinámicos5Encapsulamiento
Especificadores de acceso en C++Especificadores de acceso en profundidadOcultamiento de informaciónStruct vs ClassClases anidadas e internasResumen - Sistema de registros de estudiantes8Polimorfismo
Polimorfismo: Compilación vs. Tiempo de ejecuciónSobrecarga de funcionesFunciones virtuales revisadasFunciones virtuales purasClases abstractasDiseño de interfaces en C++Dynamic Casting y RTTIResumen: Calculadora de figuras11Conceptos avanzados de POO
Composición vs. HerenciaMixins mediante CRTPIdioma PimplBorrado de tiposEnum Classes y tipado fuerteManejo de excepciones en POOJerarquías de excepciones personalizadas14Patrones de diseño - Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositeRAII como patrón3Constructores y Destructores
Constructor por defectoConstructor parametrizadoConstructor de copiaConstructor de movimientoListas de inicialización del constructorConstructores delegadosAnálisis profundo del destructorRegla de tres / cinco / ceroResumen - Clase String6Sobrecarga de operadores
Introducción a la sobrecarga de operadoresSobrecarga de operadores aritméticosSobrecarga de operadores de comparaciónOperadores de flujo (Stream)Sobrecarga del operador de asignaciónSobrecarga de los operadores [] y ()Operadores de conversión de tiposResumen - Clase Matrix9Plantillas
Plantillas de funcionesPlantillas de clasesEspecialización de plantillasPlantillas variádicasConceptos básicos de SFINAE y Type TraitsResumen - Contenedor genérico