如何从父类调用子类函数?
Posted
技术标签:
【中文标题】如何从父类调用子类函数?【英文标题】:How to call child class function from parent class? 【发布时间】:2014-04-07 16:01:39 【问题描述】:我是 C++ 语言的新手,我正在做图书馆管理系统。 我有这样的课。 例如:
class mainLibrary
void library()
cout<<"Welcome to Our Library. Please choose following options"<<endl;
cout<<"1. Member Section, 2. Lending Section"<<endl;
if(userinput==1)
memberclassfunction();//Error : use of undeclared identifier 'memberclassfunction'.
else
lendingclassfunction();//Error : use of undeclared identifier 'lendingclassfunction'.
;
class Member:public mainLibrary
void memberclassfunction()
//do something
;
class lending:public Member
void lendingclassfunction()
//do something
;
class mainSystem:public lending
//this is empty and inherit all.
;
void main
mainSystem s1;
s1.library();
我做了这样的事情。但在 mainLibrary 类中,如果我调用 memberclassfunction();程序显示错误。使用未声明的标识符“memberclassfunction”。
任何人都可以帮助我如何做到这一点。我想我必须用指针做点什么?
【问题讨论】:
不是关于你的问题,而是......你正在使用类层次结构进行聚合,这通常是一个坏主意。只需为您的每个程序概念创建一个不同的类,然后让mainSystem
拥有它需要的成员变量。您会注意到您的代码将更易于编写和使用。
【参考方案1】:
memberclassfunction 必须是 mainLibrary 中的虚函数,这意味着 mainLibrary 将成为一个接口,您将无法实例化它。
【讨论】:
【参考方案2】:memberclassfunction
和 lendingclassfunction
都不是 mainLibrary
类的成员,这就是编译器给你这些错误的原因。我认为您的意图是使这些功能virtual
。
每当B
类从A
类继承时,前者获取后者的成员,而不是相反。
【讨论】:
【参考方案3】:一般来说,让基类依赖于其子类中的方法并不是一个好主意。但是,如果您必须这样做,您始终可以将 this
转换为子类,如果转换成功,则可以调用该方法。
lending *lendingThis = dynamic_cast<lending *>(this);
if (lendingThis)
lendingThis->lendingclassfunction();
【讨论】:
以上是关于如何从父类调用子类函数?的主要内容,如果未能解决你的问题,请参考以下文章