Итак, у меня есть 2 класса, а именно book
и mainscreen
, где book
является общедоступным с mainscreen
.Как наследовать класс A от B, наследуя B от A?
Теперь я хочу использовать публичные функции членов книги классов через функции-члены главного экрана.
Вот мой код:
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
, я получаю следующее ошибка: call to undefined function.
тот факт, что вы можете сделать, это не значит, что это хорошая идея! Существует хорошая причина, почему C# и java не позволяют этого. Пожалуйста, рассмотрите редизайн – lordkain
Наследование предполагается моделировать * is-a * отношения. Но книга не является главным экраном, и ни один из них не является основным экраном книги. Наследование - неправильный инструмент для проблемы, которую вы пытаетесь решить. – us2012
Это просто невозможно! Чего вы хотите достичь? –