PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

(2) Dúvida em C++

2 participantes

Ir para baixo

(2) Dúvida em C++ Empty (2) Dúvida em C++

Mensagem por Henrique M. Martins Sex 19 Fev 2016, 19:35

Qual seria o resultado deste programa? (Se possível explicar)


class A {
  public:
  void f() { cout << 1; }
};

class B: public A {
 private:
  void f() { cout << 2; }
};

void g(A &a) { a.f(); }

int main() {
  B b;
  g(b);
}

Henrique M. Martins
Iniciante

Mensagens : 7
Data de inscrição : 19/02/2016
Idade : 33
Localização : Rio Grande do Sul (RS)

Ir para o topo Ir para baixo

(2) Dúvida em C++ Empty Re: (2) Dúvida em C++

Mensagem por Baltuilhe Sex 19 Fev 2016, 21:14

Boa noite!

Temos duas classes, A e B, com dois métodos com mesmos nomes (f()).
O método da classe B jamais pode ser acessado diretamente pois é um método do tipo private (privado). Só poderia ser usado dentro da classe.

Ao criar o objeto do tipo B dentro da função main e ao chamar a função g(A &a), veja que esta função espera um objeto do tipo A (o que está correto, já que a classe B é derivada de A, portanto, é um objeto do tipo A), e, por isso, faz a chamada ao método da classe A e não o método a classe B.

Então, o que vai imprimir é "1".

Se quisesse imprimir o que está na classe B, teria que ser assim:

Código:
#include<iostream>

using namespace std;

class A
{
   public:
   void f()
   {
      cout << 1;
   }
};

class B: public A
{
   public:
   void f()
   {
      cout << 2;
   }
};

void g(B &a)
{
   a.f();
}

int main()
{
   B b;

   g(b);
}

Veja que troquei dentro da classe B o tipo do método de private para public, senão não ficaria acessível.

Espero ter ajudado!

Obs.: Procure saber sobre métodos virtuais e ponteiros... há algo interessante para chamar métodos de classes derivadas neste formato! Smile

____________________________________________
"Nós somos o que fazemos repetidamente. Excelência, então, não é um modo de agir, é um hábito." Aristóteles
Baltuilhe
Baltuilhe
Fera
Fera

Mensagens : 718
Data de inscrição : 23/12/2015
Idade : 48
Localização : Campo Grande, MS, Brasil

Ir para o topo Ir para baixo

(2) Dúvida em C++ Empty Re: (2) Dúvida em C++

Mensagem por Henrique M. Martins Seg 22 Fev 2016, 10:54

Muito obrigado pela ajuda!

Abraços!

Henrique M. Martins
Iniciante

Mensagens : 7
Data de inscrição : 19/02/2016
Idade : 33
Localização : Rio Grande do Sul (RS)

Ir para o topo Ir para baixo

(2) Dúvida em C++ Empty Re: (2) Dúvida em C++

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos