2015-04-15 2 views
1

Я пытаюсь скомпилировать этот код. В нем есть класс, называемый книгами, которые и другие жанры книг наследуют от него. Однако, когда я компилирую программу, она продолжает говорить, что книга - недоступная база полиции. Затем он показывает красные линии под первыми двумя вызовами add_book в главном, где они добавляют новую Полицию. Я не вижу, где в моем коде отсутствует доступ?Недопустимая база различных классов объектно-ориентированное программирование 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; 
} 

ответ

0

Изменение class Police : Roman в class Police : public Roman.

Если public не указан, Roman будет 0 базовым классом private для Police.

+0

я не заметит, что !! благодаря!! – user135688

0

Изменение этой линии

class Police : Roman {

в

class Police : public Roman {

+0

ой, боже, я даже не заметил этого !! благодаря!! – user135688

Смежные вопросы