如何从父类调用子类函数?

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】:

memberclassfunctionlendingclassfunction 都不是 mainLibrary 类的成员,这就是编译器给你这些错误的原因。我认为您的意图是使这些功能virtual

每当B 类从A 类继承时,前者获取后者的成员,而不是相反。

【讨论】:

【参考方案3】:

一般来说,让基类依赖于其子类中的方法并不是一个好主意。但是,如果您必须这样做,您始终可以将 this 转换为子类,如果转换成功,则可以调用该方法。

lending *lendingThis = dynamic_cast<lending *>(this);
if (lendingThis) 
    lendingThis->lendingclassfunction();

【讨论】:

以上是关于如何从父类调用子类函数?的主要内容,如果未能解决你的问题,请参考以下文章

从父类方法调用子类方法

子类可以直接调用父类的函数吗

C++调用父类的构造函数规则

如何从父类调用一个方法到它的子类?

尽管子类中也有相同的方法,但如何从父类停止子类对象的调用方法

何时子类必须显示调用父类带参构造函数