Таким образом, у меня есть 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
, я получаю следующее сообщение об ошибке: Вызов неопределенной функции.
У тебя есть:
Book
и MainScreen
Но вы пришли с очень неправильным заключением, что эти классы должны наследовать друг от друга (т.е. Обеспечивать какое-то поведение/атрибуты друг другу). Вместо этого вы должны создать третий класс, который эти классы наследуют (независимо от того, из чего они предназначены для общего).
Возможный интерфейсный подход может быть, например:
class Displayable {
public:
virtual void display();
};
class Book : public Displayable {
...
};
class MainScreen : public Displayable {
...
};