diff --git a/main b/main
new file mode 100755
index 0000000000000000000000000000000000000000..d32b3c90d9ee0db0d622a7dbaea0452a0698ac21
Binary files /dev/null and b/main differ
diff --git a/main.cpp b/main.cpp
index 966f5a1167082bc67257ffc8507f72cbacc49ca2..93e9082cd9afc01cabd375c1bbd46df4a7bcd48a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -2,7 +2,7 @@
 #include <iostream>
 
 #include "./sources/Biblioteca.hpp"
-#include "./sources/Livro.cpp"
+#include "./sources/Livro.hpp"
 
 using namespace std;
 
diff --git a/sources/DescricaoObra.cpp b/sources/DescricaoObra.cpp
index a038c1d660a5708e96b79a1e7faf0da316f2c826..189eb106d5c1fccdecd8400b92569ff95accac23 100644
--- a/sources/DescricaoObra.cpp
+++ b/sources/DescricaoObra.cpp
@@ -13,20 +13,15 @@ void DescricaoObra::mostrarDetalhes() const {
     cout << "Ano de Publicação: " << anoPublicacao << "\n";
 }
 
-// Operators
-bool DescricaoObra::operator==(const DescricaoObra& other) const {
-    return this->titulo == other.titulo;
-}
-
 // Methods
-string DescricaoObra::getTipo() {
+string DescricaoObra::getTipo() const {
     return this->tipo;
 }
 
-string DescricaoObra::getTitulo(){
+string DescricaoObra::getTitulo() const {
   return this->titulo;
 }
 
-int DescricaoObra::getAnoPublicacao(){
+int DescricaoObra::getAnoPublicacao() const {
   return this->anoPublicacao;
 }
diff --git a/sources/DescricaoObra.hpp b/sources/DescricaoObra.hpp
index b290b38ad5b0d4c7f5ebf650f8cc884f5fc11bad..7e839f07425c923198ce5e104bd3a9c0dd7d24b7 100644
--- a/sources/DescricaoObra.hpp
+++ b/sources/DescricaoObra.hpp
@@ -15,17 +15,14 @@ class DescricaoObra {
 
   public:
     // Contructor
-    DescricaoObra();
+    DescricaoObra() {};
     DescricaoObra(const string& tipo, const string& titulo, int ano);
-    virtual void mostrarDetalhes() const = 0;
-
-    // Operators
-    bool operator==(const DescricaoObra& other) const;
+    virtual void mostrarDetalhes() const;
 
     // Methods
-    string getTitulo();
-    string getTipo();
-    int getAnoPublicacao();
+    string getTitulo() const ;
+    string getTipo() const ;
+    int getAnoPublicacao() const ;
 };
 
 
diff --git a/sources/Livro.cpp b/sources/Livro.cpp
index 3d5eb715d27538e537c27649cd8339b43fa4e4be..463378b9b56477a599c1d5eed147a7eb69231e70 100644
--- a/sources/Livro.cpp
+++ b/sources/Livro.cpp
@@ -5,6 +5,13 @@
 
 using namespace std;
 
+Livro::Livro(const DescricaoObra& outro) {
+  if (outro.getTipo() == "livro") {
+    Livro l = static_cast<Livro>(outro);
+    Livro(l.getTitulo(), l.getAnoPublicacao(), l.getAutor(), l.getEditora());
+  }
+}
+
 Livro::Livro(const string& t, int ano, const string& a, const string& e)
   : DescricaoObra("livro", t, ano), autor(a), editora(e) {}
 
@@ -16,10 +23,10 @@ void Livro::mostrarDetalhes() const {
 }
 
 // Methods
-string Livro::getAutor(){
+string Livro::getAutor() const {
   return this->autor;
 }
 
-string Livro::getEditora(){
+string Livro::getEditora() const {
   return this->editora;
 }
diff --git a/sources/Livro.hpp b/sources/Livro.hpp
index 92943c8d9280813572e0d1a021bed40a9cdeca29..c164a3c17fd5ed70cba2a47d730313840389f76f 100644
--- a/sources/Livro.hpp
+++ b/sources/Livro.hpp
@@ -13,12 +13,13 @@ class Livro: public DescricaoObra {
 
   public:
     // Contructor
+    Livro(const DescricaoObra& outro);
     Livro(const string& t, int ano, const string& a, const string& e);
     void mostrarDetalhes() const override;
 
     // Methods
-    string getAutor();
-    string getEditora();
+    string getAutor() const ;
+    string getEditora() const ;
 
 };
 
diff --git a/sources/Obra.hpp b/sources/Obra.hpp
index 22971ccd019999a37d984ef80e63247c01d1e7cf..672bc26c636d74f2bdbfda303cabdcadbdf2a80d 100644
--- a/sources/Obra.hpp
+++ b/sources/Obra.hpp
@@ -13,7 +13,7 @@ class Obra {
     // Contructor
     Obra();
     Obra(DescricaoObra& descricao);
-    virtual void mostrarDetalhes() const;
+    void mostrarDetalhes() const;
 
     // Methods
     bool emprestar();
diff --git a/sources/Periodico.cpp b/sources/Periodico.cpp
index dac16320081e83c605f657c58dd2d6d092950d1c..fd2e836afa90cb2f2acec240923f65a1895cf7f8 100644
--- a/sources/Periodico.cpp
+++ b/sources/Periodico.cpp
@@ -3,6 +3,13 @@
 #include "./Periodico.hpp"
 
 // Contructor
+Periodico::Periodico(const DescricaoObra& outro) {
+  if (outro.getTipo() == "livro") {
+    Periodico p = static_cast<Periodico>(outro);
+    Periodico(p.getTitulo(), p.getAnoPublicacao(), p.getVolume(), p.getMes());
+  }
+}
+
 Periodico::Periodico(const std::string& t, int ano, int vol, int m)
     : DescricaoObra("periodico", t, ano), volume(vol), mes(m) {}
 
@@ -13,9 +20,10 @@ void Periodico::mostrarDetalhes() const {
 }
 
 // Methods
-int Periodico::getVolume(){
+int Periodico::getVolume() const {
   return this->volume;
 }
-int Periodico::getMes(){
+
+int Periodico::getMes() const {
   return this->mes;
 }
diff --git a/sources/Periodico.hpp b/sources/Periodico.hpp
index 2041eecc78435f29f0c5d2ac0304cf1c2d5e6a8b..c3142c2e165076da9cc7f8584dd7be40f0939722 100644
--- a/sources/Periodico.hpp
+++ b/sources/Periodico.hpp
@@ -12,12 +12,13 @@ class Periodico: public DescricaoObra {
 
   public:
     // Contructor
+    Periodico(const DescricaoObra& outro);
     Periodico(const string& t, int ano, int vol, int m);
     void mostrarDetalhes() const override;
     
     // Methods
-    int getVolume();
-    int getMes();
+    int getVolume() const;
+    int getMes() const;
 
 };