如何从 B 继承类 A,同时从 A 继承 B

How to inherit class A from B while inheriting B from A?

本文关键字:继承      更新时间:2023-10-16

所以我有 2 个类,即 bookmainscreen,其中 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<<"nnt  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

     }

     }

当我尝试在 mainscreen 的成员函数中使用类 book 的公共成员函数时,我收到以下错误:调用未定义的函数

你有:

  • 标识了两个实体(类(:BookMainScreen
  • 然后,您确定了这些类的常见行为和属性

然而,你得出了非常错误的结论,即这些类应该相互继承(即相互提供一些行为/属性(。相反,您应该做的是创建第三个类,这些类将从中继承(无论它们的共同点是什么(。

例如,一种可能的基于接口的方法可能是:

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