2015-04-15 4 views
1

J'ai essayé de compiler ce code. Il a une classe appelée livres qui et d'autres genres de livres en héritent. Cependant, quand je compile le programme, il ne cesse de dire Book est une base inaccessible de la police. Ensuite, il montre des lignes rouges sous les deux premiers appels add_book dans la main où ils ajoutent de nouveaux policiers. Je ne vois pas où il y a un manque d'accès dans mon code?Base inaccessible de classes différentes programmation orientée objet C++

#include <iostream> 
#include <vector> 
#include <string> 
using namespace std; 

class Book{ 
public: 
virtual double calc_price()const; 
Book(string t, string a, int pg, bool bs) 
: title(t), author(a), pages(pg), bestseller(bs){} 
virtual ~Book(){}; 
virtual void display() const; 

protected: 
string title; 
string author; 
int pages; 
bool bestseller;  
}; 

void Book::display() const { 
cout << "Title: " << title << endl; 
cout << "Author: " << author << endl; 
cout << "Number of pages: " << pages << endl; 
cout << "Bestseller: "; if(bestseller==true){ cout << "Yep" 
<< endl; } else  {cout << "Nope" << endl; 
cout << "Price: " << calc_price() << endl; } 
} 

double Book::calc_price() const {  
if(bestseller==true){ return (pages*0.3 + 50); } 
else { return (pages*0.3); }} 



class Roman : public Book { 
public: 
Roman(string t, string a, int pg, bool bs, bool bio) 
: Book(t,a,pg,bs), biography(bio){} 
virtual ~Roman(); 
virtual void display()const override; 
protected: 
bool biography; 
}; 

void Roman::display() const{ 
Book::display(); 
cout << "Ce roman "; 
if(biography==true){ cout << "is a biography. " << endl; 
} else { cout << "isn't a biography. " << endl; } 
} 
class Police : Roman { 
public: 
Police(string t, string a, int pg, bool bs, bool bio) 
: Roman(t,a,pg,bs,bio){} 
virtual double calc_price() const { 
double price; 
price = Book::calc_price() - 10; 
if(price < 0) { return 1; } else { return price; }} 
virtual~Police(); 
}; 

class Fantasy : public Livre { 
public: 
Fantasy(string t, string a, int pg, bool bs) 
: Book(t,a,pg,bs){} 
virtual ~Fantasy();  
virtual double calc_price() const { 
return (Book::calc_price() + 30); } 

}; 
class Library{ 
public: 
void display() const; 
void add_book(Book* l); 
void empty_stock(); 
private: 
vector<Book*> books; 
}; 

void Library::add_book(Book* b){ 
books.push_back(b);  
} 
void Library::display() const { 
for(size_t i(0); i < books.size(); ++i){ 
    books[i]->display();  
} } 

void Library::empty_stock(){ 
for(size_t i(0); i < books.size(); ++i){ 
    delete books[i]; } books.clear(); 
} 




int main() 
{ 
Library l; 

l.add_book(new Police("Dogs of Baskerville", "A.C.Doyle", 221, false,false)); 
l.add_book(new Police("Le Parrain ", "A.Cuso", 367, true, false)); 
l.add_book(new Roman("Book3", "I. Calvino", 283, false, false)); 
l.add_book(new Roman ("Geronimoe memories", "S.M. Barrett", 173, false, true)); 
l.add_book(new Fantasy ("European rivers", "C. Osborne", 150, false)); 

l.display(); 
l.empty_stock(); 

return 0; 
} 

Répondre

0

Changement class Police : Roman dans class Police : public Roman.

Si public n'est pas spécifié, le Roman sera une classe de base private pour Police.

+0

je n'ai même pas remarqué que !! Merci!! – user135688

0

Modifier cette ligne

class Police : Roman {

à

class Police : public Roman {

+0

oh mon dieu je n'ai même pas remarqué ça !! Merci!! – user135688