O Ponteiro 'this'
Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 7 de 104.
Em C++, this é um ponteiro para o objeto atual. Use this-> para acessar membros, especialmente quando os nomes dos parâmetros coincidem com os nomes dos membros.
Sem o this, o parâmetro sombreia o membro
void Player::setName(std::string name) {
name = name; // Atribui o parâmetro a si mesmo! Membro inalterado.
}Usando this-> para atribuir valores corretamente
void Player::setName(std::string name) {
this->name = name; // Atribui o parâmetro ao membro
}Usando this-> em métodos
std::string Player::getStatus() {
return this->name + " - Score: " + std::to_string(this->score);
}O ponteiro this sempre aponta para a instância do objeto atual. Ao contrário de Java e C#, onde this é uma referência, em C++ ele é um ponteiro, então você usa -> em vez de . para acessar membros.
Desafio
MédioImplemente os métodos da classe Player usando this-> para distinguir entre membros e parâmetros com o mesmo nome:
- Métodos setter: use
this->para atribuir parâmetros aos membros getStatus(): usethis->para acessar os membros, retorne"<name> - Score: <score>, Level: <level>"
Folha de consulta
Em C++, this é um ponteiro para o objeto atual. Use this-> para acessar membros, especialmente quando os nomes dos parâmetros coincidem com os nomes dos membros.
Sem o this, o parâmetro sombreia o membro:
void Player::setName(std::string name) {
name = name; // Assigns parameter to itself! Member unchanged.
}Usando this-> para atribuir valores corretamente:
void Player::setName(std::string name) {
this->name = name; // Assigns parameter to member
}Usando this-> em métodos:
std::string Player::getStatus() {
return this->name + " - Score: " + std::to_string(this->score);
}O ponteiro this sempre aponta para a instância do objeto atual. Ao contrário de Java e C#, onde this é uma referência, em C++ ele é um ponteiro, então você usa -> em vez de . para acessar os membros.
Experimente você mesmo
#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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos de OOP
Arquivos ExternosBuild e Compilação em C++Arquivos Header e SourceNamespaces e EscopoIntrodução a OOP em C++Classes vs ObjetosO Ponteiro 'this'Métodos (Funções Membro)Atributos (Membros de Dados)Básico de Ctors e DtorsRecapitulação - Calculadora Simples4Propriedades de Classe
Membros de Instância vs EstáticosGetters e SettersFunções de Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRecapitulação - Gerenciador de Conta Bancária7Herança
Herança BásicaNíveis de Acesso na HerançaOrdem de Chamada de Ctor e DtorSobrescrita de MétodosFunções Virtuais e VTableHerança MúltiplaHerança VirtualRecapitulação - Hierarquia de Funcionários2Gerenciamento de Memória
Memória Stack vs HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Smart Pointers em C++RAII em C++Recapitulação - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de Acesso em C++Especificadores de Acesso em DetalhesOcultação de InformaçãoStruct vs ClassClasses Aninhadas e InternasRecapitulação - Sistema de Registros de Alunos8Polimorfismo
Polimorfismo de Compilação vs Tempo de ExecuçãoSobrecarga de FunçõesFunções Virtuais RevisitadasFunções Virtuais PurasClasses AbstratasDesign de Interfaces em C++Dynamic Casting e RTTIRecapitulação - Calculadora de Formas3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentaçãoListas de Inicialização do ConstrutorConstrutores DelegadosMergulho Profundo em DestrutoresRegra dos Três / Cinco / ZeroRecapitulação - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de StreamSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçãoTemplates de ClasseEspecialização de TemplatesTemplates VariádicosFundamentos de SFINAE e Type TraitsRecapitulação - Container Genérico