Как наследовать класс A от B при наследовании B от A?

0

Таким образом, у меня есть 2 класса, а именно book и mainscreen, где book публично унаследована от mainscreen.

Теперь я хочу использовать публичные функции члена книги классов через функции-члены главного экрана.

Вот мой код:

class book;

class mainscreen:virtual public book
{
  protected:
    int logged;

  public:
    void printmenu();
    void printhead();
    void auth();
    void logout();
    mainscreen();
};

class book:public mainscreen
{
  private: 
    int bookno, 
        days,
        late_days;
    long double price;

    float fine_calc(int a,float b)  // a -> late days , b -> fine per day
    { 
    return a*b;
    }

  public: 
    book();   //const
    void input();
    void display();
    void update();
};

Вызывающая часть: -

     void mainscreen::printmenu(){
     int i;
     printhead();
     cout<<"\n\n\t  Choose a Number to perform the corresponding task \n";
     cout<<"\n1.Enter a new Book ";
     cout<<"\n2.Issue a Book ";
     cout<<"\n3.Return a book" ;
     cout<<"\n4.Update Information for a book ";
     cout<<"\n5.Information About books ";
     cout<<"\n6.Logout ";

     cout<<"\nEnter your choice: ";
     cin>>i;

     menuhandler(i);

     }

     void mainscreen::menuhandler(int choice){  //the no of choice selected

     switch(choice)
     {
     case 1:        printhead();
        input();

     case 2:        printhead();
        issuebook();         

     case 3:        printhead();
        returnbook();              

     case 4:        printhead();
        update();

     case 5:        printhead();
        display();

     case 6:        logout();                     

     default:
        cout<<"Invalid Choice! Press Return to Try again. ";
        getch();
        printmenu();                        // Reset to menu



     }


     }

Когда я пытаюсь использовать функции - членов класса book в функции члена В mainscreen, я получаю следующее сообщение об ошибке: Вызов неопределенной функции.

Теги:
inheritance
virtual-inheritance

1 ответ

4
Лучший ответ

У тебя есть:

  • определены два объекта (классы): Book и MainScreen
  • и тогда вы определили общее поведение и атрибуты этих классов

Но вы пришли с очень неправильным заключением, что эти классы должны наследовать друг от друга (т.е. Обеспечивать какое-то поведение/атрибуты друг другу). Вместо этого вы должны создать третий класс, который эти классы наследуют (независимо от того, из чего они предназначены для общего).

Возможный интерфейсный подход может быть, например:

class Displayable {
public:
    virtual void display();
};

class Book : public Displayable {
    ...
};

class MainScreen : public Displayable {
    ...
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню