#ifndef FILME_H
#define FILME_H
#include <iosfwd>
#include <string>
/** Representa filmes.
@invariant 0 <= duracao_. */
class Filme {
public:
/** Constrói novo filme com nome, realizador e duração dados.
@pre 0 <= duracao.
@post nome() = nome e realizador() = realizador e duracao() =
duracao. */
Filme(std::string const& nome, std::string const& realizador,
int duracao);
/** Constrói novo filme com informação extraída do canal de
entrada.
@pre entrada.
@post *this tem informação extraída do canal de entrada. */
explicit Filme(std::istream& entrada);
/** Devolve o nome do filme.
@pre V.
@post nome = nome do filme. */
std::string const& nome() const;
/** Devolve o realizador do filme.
@pre V.
@post realizador = realizador do filme. */
std::string const& realizador() const;
/** Devolve a duração do filme.
@pre V.
@post duracao = duração do filme. */
int duracao() const;
/** Mostra informação sobre o filme no canal dado num formato
agradável à vista.
@pre V.
@post saida contém a informação sobre o filme. */
void mostraEm(std::ostream& saida) const;
/** Guarda informação sobre o filme no canal dado num formato
apropriado a futuros carregamentos.
@pre saida.
@post saida contém a informação sobre o filme. */
// void guardaEm(std::ostream& saida) const;
/** Le informação sobre o filme do canal dado assumindo que este
está ligado a um ser humano (e.g., leitura do teclado).
@pre V.
@post *this contém a informação sobre o filme lida do canal de
entrada. */
// void leDe(std::istream& entrada);
/** Carrega informação sobre o filme do canal dado assumindo que este
está ligado no formato usado pela operação carrega().
@pre entrada.
@post *this contém a informação sobre o filme carregada do canal de
entrada. */
void carregaDe(std::istream& entrada);
private:
std::string nome_;
std::string realizador_;
int duracao_;
/** Indica se a condição invariante da classe se verifica.
@pre V.
@post cumpreInvariante = 0 <= duracao_. */
bool cumpreInvariante() const;
};
#include "filme_impl.H"
#endif // FILME_H