SóProvas


ID
17137
Banca
CESPE / CEBRASPE
Órgão
TSE
Ano
2007
Provas
Disciplina
Programação
Assuntos

Código para as questões 40 e 41

class Porta {

int numero;

public:

Porta(int numero):numero(numero){}

virtual ~Porta(){cout << "Fechar" << "\n";}

virtual void enviar(char) throw (invalid_argument) = 0;

int getNumero() const {return numero;}

};

class Serial:public Porta {

string nome;

public:

Serial(int numero, string nome):Porta(numero), nome(nome){}

~Serial(){cout << "Encerrar" << "\n";}

string getNome() const;

void enviar(char) throw (invalid_argument);

};

inline string Serial::getNome() const {

return nome;

}

void Serial::enviar(char dado) throw (invalid_argument){

if (dado == '0')

throw invalid_argument("Valor nulo");

cout << "Enviar " << dado << "\n";

}

Considerando o trecho de código apresentado, escrito na linguagem C++, assinale a opção correta.

Alternativas
Comentários
  • O conceito de funções virtuais resolve os seguintes problemas:

    Em OOP quando uma classe derivada herda uma classe base, um objeto da classe derivada pode ser referenciado como sendo do tipo da classe base ou do tipo da classe derivada. Se houver métodos da classe base sendo sobrescrevidos pela classe derivada, o comportamento da chamada do método pode ser ambíguo.

    A distinção entre virtual e não-virtual resolve esta ambiguidade. Se uma função em questão é declarada "virtual" na classe base então a função da classe derivada será chamada (se existir). Se não for virtual, a função da classe base será chamada.

    Funções virtuais superam os problemas com a solução "tipo de campo" ao permitir que programador declare funções na classe base que possam ser redefinidas em cada classe derivada

    Uma função virtual pura ou método virtual puro é uma função virtual que deve ser ser implementada por uma classe derivada, se essa classe não for abstrata. Classes contendo métodos virtuais puros são chamados "abstratos"; elas não podem ser instanciados diretamente, e uma subclasse abstrata só pode ser instanciada diretamente se todos os métodos virtuais puros forem implementados por essa classe ou uma classe pai. Tipicamente, métodos virtuais puros tem uma declaração (assinatura) e nenhuma definição (implementação).
  • Um método pode ser contante?

  • O método com const no argumento, é para que o parâmetro forçado a ser somente leitura