1) Não pode mandar Bom dia/tarde/noite. 2) Stickers e off-topics são permitidos com parcimônia. 3) Adhominem são proibidos. Quem abusar dessas regras, toma um delete. Se abusar demais, toma um delete de todo o histórico do usuário. De resto, vale tudo.
quando o construtor é chamado, ele é “chamado em duas etapas”
Читать полностью…aí beleza, chegou a hora de chamar o construtor da tua classe de fato
Читать полностью…não exatamente, mas você vai visualizar melhor o que está acontecendo quando tiver noção da pilha (stack) de execução
Читать полностью…apenas quando os construtores de todas as classes-mãe são chamados, é que o construtor da classe derivada é chamado
Читать полностью…o construtor da classe-mãe (Pokemon
nesse caso) é chamado *antes* do construtor da classe derivada
então a classe Pokemon
tem espaço para 4 bytes (1 enum na arquitetura que tirei da minha cabeça agora), e qualquer classe que herdar de Pokemon
vai ter esses 4 bytes + o espaço para quaisquer membros-extras que você declarar
class Togerpir : public Pokemon
{
int dias_de_vida;
};
Togerpir n01;
no final você só está “reservando” espaço para N bytes
Читать полностью…coloca um print no corpo do construtor de Pokemon, e você verá que a variável tipo
, herdada de Pokemon
, já foi inicializada:class Charmander : public Pokemon
{
Pokemon()
{
std::cout << tipo << std::endl;
}
};
então você não precisa fazer:
Display display = Display();
o construtor da classe é chamado pra inicializar a variável
Читать полностью…se for tipo primitivo, e estiver na stack, tá pegando lixo
Читать полностью…acho que esse nome, “instanciar”, é mais de Java
Читать полностью…(considere que todos os construtores das classes-mãe já foram chamados, porque tudo isso que vou falar agora acontece depois)
Читать полностью…class Eren : class Titan
{
Eren()
: nome{"Eren Jagger"}
/* aqui é a lista de inicialização */
{
// aqui é o corpo do construtor
}
std::string nome;
};
mas é bom saber como funciona em c++ tb
Читать полностью…é bom saber, pq eu sei o conceito de herança das outras linguagens (que eu falei, js, ts, python, etc)
Читать полностью…se você não está usando herança, não precisa se preocupar com isso (mas deveria aprender depois de qualquer forma)
Читать полностью…o construtor da classe-mãe vai inicializar os membros da classe-mãe
Читать полностью…eu queria usar cores e uns desenhos, mas o Telegram não deixa
Читать полностью…Essa é a sintaxe para herança correto?
Читать полностью…struct
e class
é só um jeito de declarar um agregado de bytes e dar alguma semântica a isso
Quando o construtor é chamado, aí tem uma ordem de inicialização que é bem fácil de entender. Primeiro, as classes-base são inicializadas. Por exemplo:class Pokemon
{
enum { NORMAL, AGUA, FOGO, ABERRACAO } tipo = NORMAL;
};
class Charmander : public Pokemon
{
Pokemon() {}
};
ahh pode crer.. eu venho de linguagem web (js, ts, python, etc)...
Читать полностью…se não for um tipo primitivo (ex.: uma classe), aí a inicialização é diferente
Читать полностью…então, via de regra, você sempre inicializa tipos primitivos com algum valor útil pra não pegar lixo de memória
Читать полностью…os efeitos da inicialização dependem do tipo de inicialização, do tipo da variável, e de “onde a variável foi declarada” (entre aspas porque a explicação tecnicamente correta é mais longa e desnecessária nesse momento)
Читать полностью…