ACE_Task类无activate函数,派生类MyClass为何可调用该函数?
问题解答
核心原因:C++公有继承的特性
ACE的类继承链是:MyClass → ACE_Task<ACE_MT_SYNCH> → ACE_Task_BASE。在C++的公有继承规则下,基类的公有、保护成员会被派生类继承并保留对应的访问权限。
activate()是ACE_Task_BASE里的公有成员函数,当ACE_Task以公有方式继承ACE_Task_BASE后,这个函数就成为了ACE_Task的公有成员;而你的MyClass又公有继承了ACE_Task<ACE_MT_SYNCH>,自然就继承到了activate()方法,所以在MyClass的open()成员函数里,用this->activate()调用完全合法。
额外补充
ACE_Task自己没定义activate(),但它通过继承拿到了基类ACE_Task_BASE的这个方法,这就是C++继承机制的基本作用——让派生类可以复用基类的成员。- 你重写的
open()和svc()也是同理,它们是ACE_Task里的虚函数,MyClass继承后重写实现自己的逻辑,和activate()的继承逻辑是一致的。
内容的提问来源于stack exchange,提问作者user3798283
相关产品推荐
相关产品推荐

