Magna Concursos
2087914 Ano: 2003
Disciplina: TI - Desenvolvimento de Sistemas
Banca: CESPE / CEBRASPE
Orgão: IBAMA

Conforme hierarquia de classes da figura acima, foi definido um método void f() nas quatro classes — A, B, C e D —, de tal maneira que a função f( ) de cada classe chame somente uma vez a função f( ) de cada um de seus antecessores na ordem hierárquica mostrada, de baixo para cima. O código que implementa essas classes está descrito a seguir.

class A {
protected:
void f_( ) {...}
public:
virtual void f() {f_();}
};

class B: public A {
protected:
void f_( ) {…}
public:
virtual void f() {A::f_(); f_();}
};

class C:public A {
protected:
void f_( ) {…}
public:
virtual void f( ) {A::f_( ); f_( );}
};

class D: public B, public C {
protected:
void f_( ) {…}
public:
void f( ) {B::f_( ); C::f_( ); f_( );}
};

Considerando as informações do texto ao lado, julgue o item seguinte.

Um compilador C++ que encontre a chamada

A a;

B b;

C c;

if (...) a=&b; else a=&c;

a->f( );

definirá para cada objeto um atributo oculto que indicará à qual das três classes pertence (exemplo: A=0, B=1, C=2); construirá um vetor dinâmico pf de ponteiros às três funções A::f( ), B::f( ), C::f( ); e gerará uma chamada indireta ao pf[0].

 

Provas

Questão presente nas seguintes provas