LAB: Book information (overriding member functions)Given main() and a base Book class, define a derived class called Encyclopedia. Within the derived Encyclopedia class, define a PrintInfo() function that overrides the Book class' PrintInfo() function by printing not only the title, author, publisher, and publication date, but also the edition and number of volumes.Ex. If the input is:The HobbitJ. R. R. TolkienGeorge Allen & Unwin21 September 1937The Illustrated Encyclopedia of the UniverseJames W. GuthrieWatson-Guptill20012nd1the output is:Book Information:Book Title: The HobbitAuthor: J. R. R. TolkienPublisher: George Allen & UnwinPublication Date: 21 September 1937Book Information:Book Title: The Illustrated Encyclopedia of the UniverseAuthor: James W. GuthriePublisher: Watson-GuptillPublication Date: 2001Edition: 2ndNumber of Volumes: 1Note: Indentations use 3 spaces.LAB ACTIVITY9.15.1: LAB: Book information (overriding member functions)main.cpp#include "Book.h"#include "Encyclopedia.h"#include #include using namespace std;int main(int argc, char* argv[]) {Book myBook;Encyclopedia myEncyclopedia;string title, author, publisher, publicationDate;string eTitle, eAuthor, ePublisher, ePublicationDate, edition;int numVolumes;getline(cin, title);getline(cin, author);getline(cin, publisher);getline(cin, publicationDate);getline(cin, eTitle);getline(cin, eAuthor);getline(cin, ePublisher);getline(cin, ePublicationDate);getline(cin, edition);cin >> numVolumes;myBook.SetTitle(title);myBook.SetAuthor(author);myBook.SetPublisher(publisher);myBook.SetPublicationDate(publicationDate);myBook.PrintInfo();myEncyclopedia.SetTitle(eTitle);myEncyclopedia.SetAuthor(eAuthor);myEncyclopedia.SetPublisher(ePublisher);myEncyclopedia.SetPublicationDate(ePublicationDate);myEncyclopedia.SetEdition(edition);myEncyclopedia.SetNumVolumes(numVolumes);myEncyclopedia.PrintInfo();return 0;}Book.h#ifndef BOOKH#define BOOKH#include using namespace std;class Book {public:void SetTitle(string userTitle);string GetTitle();void SetAuthor(string userAuthor);string GetAuthor();void SetPublisher(string userPublisher);string GetPublisher();void SetPublicationDate(string userPublicationDate);string GetPublicationDate();void PrintInfo();protected:string title;string author;string publisher;string publicationDate;};#endifBook.cpp#include "Book.h"#include void Book::SetTitle(string userTitle) {title = userTitle;}string Book::GetTitle() {return title;}void Book::SetAuthor(string userAuthor) {author = userAuthor;}string Book::GetAuthor() {return author;}void Book::SetPublisher(string userPublisher) {publisher = userPublisher;}string Book::GetPublisher() {return publisher;}void Book::SetPublicationDate(string userPublicationDate) {publicationDate = userPublicationDate;}string Book::GetPublicationDate() {return publicationDate;}void Book::PrintInfo() {cout << "Book Information: " << endl;cout << " Book Title: " << title << endl;cout << " Author: " << author << endl;cout << " Publisher: " << publisher << endl;cout << " Publication Date: " << publicationDate << endl;}#ifndef ENCYCLOPEDIAH#define ENCYCLOPEDIAH#include "Book.h"Encyclopedia.hclass Encyclopedia : public Book {// TODO: Declare mutator functions -// SetEdition(), SetNumVolumes()// TODO: Declare accessor functions -// GetEdition(), GetNumVolumes()// TODO: Declare a PrintInfo() function that overrides// the PrintInfo in Book class// TODO: Declare private fields: edition, numVolumes};#endifEncyclopedia.cpp#include "Encyclopedia.h"#include // Define functions declared in Encyclopedia.h