(2) Dúvida em C++
2 participantes
Página 1 de 1
(2) Dúvida em C++
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);
}
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)
Re: (2) Dúvida em C++
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:
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!
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!
____________________________________________
"Nós somos o que fazemos repetidamente. Excelência, então, não é um modo de agir, é um hábito." Aristóteles
Baltuilhe- Fera
- Mensagens : 718
Data de inscrição : 23/12/2015
Idade : 48
Localização : Campo Grande, MS, Brasil
Re: (2) Dúvida em C++
Muito obrigado pela ajuda!
Abraços!
Abraços!
Henrique M. Martins- Iniciante
- Mensagens : 7
Data de inscrição : 19/02/2016
Idade : 33
Localização : Rio Grande do Sul (RS)
Tópicos semelhantes
» Dúvida geometria, dúvida própria!
» coordenadas
» ITA-Dúvida
» Flutuação dos corpos
» Dinâmica. Leis de newton
» coordenadas
» ITA-Dúvida
» Flutuação dos corpos
» Dinâmica. Leis de newton
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos