如何在从 A 继承 B 的同时从 B 继承 A 类? [关闭]
Posted
技术标签:
【中文标题】如何在从 A 继承 B 的同时从 B 继承 A 类? [关闭]【英文标题】:How to inherit class A from B while inheriting B from A? [closed] 【发布时间】:2013-10-10 11:28:18 【问题描述】:所以我有两个类,即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
当我尝试在 mainscreen
的成员函数中使用类 book
的公共成员函数时,我收到以下错误:调用未定义函数。
【问题讨论】:
您可以做到这一点并不意味着这是一个好主意! c# 和 java 不允许这样做是有充分理由的。请考虑重新设计 继承应该模拟 is-a 关系。但是一本书不是主屏幕,主屏幕也不是一本书。对于您要解决的问题,继承是错误的工具。 继承对 is-a 关系建模。如果book
是mainscreen
,反之亦然,那么它们就是一个类。如果这不能回答您的问题,那么您需要更好地解释您要解决的问题。
哪个编译器允许这个class book; class mainscreen:virtual public book
??根据 [class.derived]/2 “由 base-type-specifier 表示的类型应是不是未完全定义的类的类类型”(我倾向于说扔掉那个编译器)
只是因为它是家庭作业并不意味着你应该做错。
【参考方案1】:
你有:
标识了两个实体(类):Book
和 MainScreen
然后您确定了这些类的常见行为和属性
然而你得出了一个非常错误的结论,即这些类应该相互继承(即相互提供一些行为/属性)。相反,您应该做的是创建第三个类,这些类将从中继承(无论它们应该具有什么共同点)。
一种可能的基于接口的方法可以是例如:
class Displayable
public:
virtual void display();
;
class Book : public Displayable
...
;
class MainScreen : public Displayable
...
;
【讨论】:
以上是关于如何在从 A 继承 B 的同时从 B 继承 A 类? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章