0

所以我有 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<<"\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,出现以下错误:调用未定义函数

4

1 回答 1

4

你有:

  • 确定了两个实体(类):BookMainScreen
  • 然后你确定了这些类的共同行为和属性

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

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

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

class Book : public Displayable {
    ...
};

class MainScreen : public Displayable {
    ...
};
于 2013-10-10T11:36:18.587 回答