You are on page 1of 2

1

Universidade Federal de Campina Grande


Departamento de Sistemas e Computao
Disciplina: Tcnicas de Programao
PROVA PRTICA DO MDULO II TURMA: 01
SEMESTRE 2014.1 DATA: 25/07/2014

Matrcula

Nome

Nota

IMPORTANTE: Esta a Parte II (Prova Prtica) do exerccio parcial do Mdulo II. As questes j
esto com os valores ajustados para que o total da prova na nota global valha 6,0.
O exerccio DEVE ser executado individualmente em 120 minutos.

1. Considerando-se o trecho de cdigo a seguir: 0,75


#include <iostream>
using namespace std;
class Pai{
public:
Pai(){
std::cerr << "Construindo Pai
p = new int;
}
~Pai(){
std::cerr << "Destruindo Pai
delete p;
}
private:
int* p;
};

-> " << this << std::endl;

-> " << this << std::endl;

class Filha : public Pai {


public:
Filha() {
std::cerr << "Construindo Filha -> " << this << std::endl;
f = new double;
}
~Filha() {
std::cerr << "Destruindo Filha -> " << this << std::endl;
delete f;
}
private:
double* f;
};
int main() {
int ret = 1;
Pai* apont = new Filha;
delete apont;
return ret;
}

i) Executar o cdigo e explicar, a partir de um comentrio objetivo, mas esclarecedor (que deve
ser inserido ao final do programa), o resultado de sua execuo.
ii) Alterar o cdigo a fim de EVITAR o efeito observado no item i), comentando, na(s) linha(s)
alteradas, o papel da(s) alterao(es) na execuo do cdigo alterado.
2. No tocante ao trecho de cdigo a seguir: 0,85
#include <iostream>
using namespace std;

class Abstrata {
public:
virtual ~Abstrata() { }
virtual void setValor(int i) = 0;
virtual int getValor(void) = 0;
};
class Derivada : public virtual Abstrata {
public:
~Derivada() { }
void setValor(int i) { Valor = i; }
int getValue(void) { return Valor; }
void impValor(void) { std::cout << "Derivada::impValor(): O valor eh "
<< Valor << std::endl; }
private:
int Valor;
};
void impValor1(Abstrata* v) { std::cout << "impValor1(): O valor eh " << v
->getValor() << std::endl; }
void impValor2(Abstrata* v) {
Derivada* d = v;
d->impValor();
}
int main() {
Derivada d;
Abstrata* v = &d;
v->setValor(1);
impValor1(v);
impValor2(v);
return 0;
}

i) O que se espera como sada ocorre? Por qu?


ii) Corrigir o cdigo dado, a fim de que ocorra o que se espera. Comentar, na(s) linha(s)
alteradas, o papel da(s) alterao(es) para a execuo esperada.
3. No mbito da linguagem C++, sabe-se que a herana dita mltipla quando a classe
derivada herda caractersticas de duas ou mais classes-base. Considerando-se que
um livro compe-se de uma capa e de uma sequncia de pginas, escrever um
programa C++ que implemente as classes Capa e Pagina, das quais uma terceira
classe, Livro, derivada. Os objetos da classe Capa so caracterizados pelo atributo
titulo, enquanto os objetos da classe Pagina tm como atributos numlin (nmero de
linhas da pgina) e texto (apontador para uma string de caracteres). Por fim, os
objetos da classe derivada Livro so caracterizados pelos atributos autor (apontador
para uma string de caracteres contendo o nome do autor do livro), titulo (apontador
para uma string de caracteres contendo o ttulo do livro) e custo (preo do livro).
Testar o cdigo implementado com os seguintes dados: 0,85
Migrando de C para C++ - Guia Prtico de Programao
WILSON KAWANO
R$ 88,99

4. Sobrecarregar o operador != para verificar se dois nmeros complexos (double) so


iguais ou diferentes. Testar a implementao com os nmeros 1,0985 2,2995i e
1,0999 2,29995i. 0,55

SUCESSO!

You might also like