#include <iostream>
using namespace std;
class Pessoa {
public:
string nome;
};
class Estudante : public Pessoa {
public:
int matricula;
};
class EstGrad : public Estudante {
public:
string curso;
};
int main() {
EstGrad eg;
eg.nome = "Carlos";
eg.matricula = 999;
eg.curso = "Engenharia";
cout << eg.curso;
}
O que será impresso?
a)Carlos
b) 999
c)Engenharia
d)Erro de compilação.
e)Nenhuma saída.
#include <iostream>
using namespace std;
class Pessoa {
public:
string nome;
};
class Estudante : public Pessoa {
public:
int matricula;
};
class EstGrad : public Estudante {
public:
string curso;
};
int main() {
EstGrad eg;
eg.nome = "Carlos";
eg.matricula = 999;
eg.curso = "Engenharia";
cout << eg.curso;
}
a)Carlos
b) 999
c)Engenharia
d)Erro de compilação.
e)Nenhuma saída.
Passo 1
O enunciado mostra um programa em C++ com três classes em herança e um
a) Carlos
b) 999
c) Engenharia
d) Erro de compilação.
e) Nenhuma saída.
main. Pergunta: o que será impresso quando o programa for executado? As alternativas são:a) Carlos
b) 999
c) Engenharia
d) Erro de compilação.
e) Nenhuma saída.
Informações relevantes dadas no enunciado:
- Há uma classe
Pessoacom um membro públiconomedo tipostring. - Há uma classe
Estudanteque herda publicamente dePessoae tem um membro públicomatriculado tipoint. - Há uma classe
EstGradque herda publicamente deEstudantee tem um membro públicocursodo tipostring. - No
mainé criado um objetoEstGrad eg;. - As seguintes atribuições são feitas:
eg.nome = "Carlos";,eg.matricula = 999;,eg.curso = "Engenharia";. - O programa faz
cout << eg.curso;. - O arquivo inclui
#include <iostream>eusing namespace std;.
Passo 2
Entender herança e membros públicos (explicação didática e passo a passo): quando uma classe B herda publicamente de uma classe A (
class B : public A), os membros públicos de A ficam públicos também em B. Isso significa que um objeto de B pode acessar diretamente os membros públicos definidos em A. No código:Pessoa::nomeé público, entãoEstudanteeEstGrad(e seus objetos) têm esse membro acessível.Estudante::matriculaé público, entãoEstGrade seus objetos têm esse membro acessível.EstGrad::cursoé público e pertence diretamente ao objetoEstGrad.
Resumo prático: o objeto
eg tem, entre outros, três campos públicos acessíveis: nome, matricula e curso.Passo 3
O que fazem as atribuições no
main (passo a passo):EstGrad eg;declara uma variávelegdo tipoEstGrad— cria o objeto com os membros herdados e próprios.eg.nome = "Carlos";coloca a string"Carlos"no membronomedo objetoeg.- Explicando tipo
string: é um tipo que armazena texto. A atribuição copia o conteúdo textual para o membro.
- Explicando tipo
eg.matricula = 999;coloca o inteiro999no membromatricula.eg.curso = "Engenharia";coloca a string"Engenharia"no membrocurso.
Portanto, após essas três linhas, os campos do objeto valem exatamente:
eg.nomecontém"Carlos".eg.matriculacontém999.eg.cursocontém"Engenharia".
Passo 4
O que faz
cout << eg.curso; (explicação didática):couté o fluxo de saída padrão (tela).- O operador
<<escreve no fluxo a representação do valor à sua direita. - Quando passamos uma
std::string,coutescreve os caracteres dessa string, exatamente em ordem, sem adicionar automaticamente nova linha. - Assim,
cout << eg.curso;escreve o conteúdo deeg.curso, que é"Engenharia", na saída padrão.
Logo, a saída visível será o texto Engenharia (sem quebra de linha adicionada).
Passo 5
Sobre possível erro de compilação (análise e tranquilização):
- O código inclui
#include <iostream>e usastd::string. Em muitos compiladores a inclusão de<iostream>traz as definições necessárias parastd::stringpor inclusão indireta; mas, estritamente, o mais correto e portátil é também incluir<string>quando se usastd::string. - Porém o enunciado pede para assumir que a questão está bem formulada. Nesse contexto, devemos considerar que o código compila e roda, e não há erro de compilação decorrente das classes ou do uso de membros (a herança e acessos são públicos e corretos).
- Assim, não escolhemos a alternativa “Erro de compilação.”
Passo 6
Concluir qual alternativa corresponde à saída:
cout << eg.curso;escreve"Engenharia".- A alternativa que corresponde a isso é a alternativa c).
Resposta
c) Engenharia