#include <iostream>
using namespace std;
class Pessoa {
public:
string nome;
};
class Estudante : public Pessoa {
public:
int matricula;
};
int main() {
Estudante e;
e.nome = "Ana";
e.matricula = 123;
cout << e.nome << " - " << e.matricula;
}
Qual será a saída?
a) Erro de compilação.
b) Ana - 123
c) 0-0
d) Apenas “Ana”.
e) Apenas “123”.
#include <iostream>
using namespace std;
class Pessoa {
public:
string nome;
};
class Estudante : public Pessoa {
public:
int matricula;
};
int main() {
Estudante e;
e.nome = "Ana";
e.matricula = 123;
cout << e.nome << " - " << e.matricula;
}
a) Erro de compilação.
b) Ana - 123
c) 0-0
d) Apenas “Ana”.
e) Apenas “123”.
Passo 1
O enunciado pergunta qual será a saída do programa C++ dado e fornece as alternativas:
a) Erro de compilação.
b) Ana - 123
c) 0-0
d) Apenas “Ana”.
e) Apenas “123”.
a) Erro de compilação.
b) Ana - 123
c) 0-0
d) Apenas “Ana”.
e) Apenas “123”.
Informações relevantes extraídas do código (copiadas/interpretadas do enunciado):
- Há uma classe
Pessoacom um membro públiconomedo tipostring. - Há uma classe
Estudanteque fazpublicinheritance dePessoae adiciona um membro públicomatriculado tipoint. - No
main()é criado um objetoEstudantechamadoe. - Em seguida há atribuições:
e.nome = "Ana";ee.matricula = 123;. - Depois imprime-se com
cout << e.nome << " - " << e.matricula;. - O programa inclui
<iostream>e usausing namespace std;.
Passo 2
Entendendo o que significa os membros serem
public e a herança public: quando uma classe é herdada com public, os membros public da classe base permanecem acessíveis como public na classe derivada. Ou seja, Estudante “herda” o campo nome de Pessoa e esse campo pode ser acessado diretamente em e.nome. Aqui tudo é público, então não há problemas de acesso. Isso responde se alguma tentativa de leitura/escrita fosse proibida — não é o caso.Passo 3
O que acontece na criação do objeto
Estudante e;: o compilador gera um construtor padrão (implícito) que inicializa os membros da forma normal para tipos de cada membro:- Para
std::string(tipo denome): o construtor padrão dostd::stringcria uma string vazia (ou seja,nomecomeça como""). - Para
int(tipo dematricula): antes de qualquer atribuição poderia ficar com valor indeterminado, mas isso só importaria se tentássemos usarmatriculaantes de atribuí-la. No código, nós logo atribuímos um valor amatricula, então isso não causa problema.
Obs.: o enunciado pediu para supor que a questão está bem formulada — portanto assumimos que o uso de
string é válido (os includes necessários estão presentes ou disponíveis).Passo 4
Atribuições executadas no
main():e.nome = "Ana";— aqui um literal de string em C++ é atribuído aostd::stringmembronome. Após essa linha,e.nomecontém exatamente a sequência de caracteresAna.e.matricula = 123;— aqui atribuimos o inteiroao campo matricula. Após essa linha,e.matriculavale.
Expliquei isso porque às vezes na prova alguém confunde inicialização com atribuição; aqui ambos são atribuídos explicitamente antes do uso.
Passo 5
Como funciona o
cout << e.nome << " - " << e.matricula;:operator<<doostreamimprimee.nome(que é a stringAna).- Em seguida imprime o literal de string
" - "que é exatamente um espaço, um hífen e um espaço. - Por fim imprime o inteiro
e.matriculaque vale. - Não há quebras de linha automáticas — o código imprime os três pedaços na sequência na mesma linha.
Portanto a sequência impressa será: primeiro
Ana, depois -, depois 123.Passo 6
Verificando possíveis razões para erro de compilação ou saída diferente:
- Não há erro de sintaxe visível: declarações de classes, herança, criação de objeto e uso de
coutestão corretos. - Não há acesso a membros privados (todos são
public). - Os tipos usados (
stringeint) são compatíveis com as operações realizadas.
Logo, a alternativa (a) “Erro de compilação” pode ser descartada.
Passo 7
Juntando tudo: o programa imprime exatamente a string formada ao concatenar os três pedaços do passo anterior. Assim a saída exibida no terminal será:
Ana - 123
(exatamente nessa ordem, sem quebra de linha final obrigatória no código dado).
Resposta
b) Ana - 123