如何从A继承B时从B继承A类?

时间:2013-10-10 11:28:19

标签: c++ inheritance virtual-inheritance

所以我有两个类,bookmainscreenbook公开继承自mainscreen

现在我想通过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的公共成员函数时,出现以下错误:调用未定义的函数

1 个答案:

答案 0 :(得分:4)

你有:

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

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

可能的基于接口的方法可能是:

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

class Book : public Displayable {
    ...
};

class MainScreen : public Displayable {
    ...
};