C++如何从基类调用派生类中的方法
C++ how to call method in derived class from base class
我想做的是让Execute()
运行并完成它调用Base::Done()
,然后调用Derived::Done()
。我这样做是因为Base
类Execute
会做一些事情,当它完成时,调用Derived::Done()
。我希望我的解释是正确的。有点像一个在任务完成时被调用的监听器。我有点纠结于Base
类将如何调用Derived
类。
class Base
{
virtual void Done(int code){};
void Execute();
}
void Base::Execute()
{
}
class Derived : Base
{
void Done(int code);
void Run();
}
Derived::Done(int code)
{
}
void Derived::Run()
{
Execute();
}
您可以使用模板方法:
class Base
{
public:
void Execute()
{
BaseDone(42);
DoDone(42);
}
private:
void BaseDone(int code){};
virtual void DoDone(int) = 0;
};
class Derived : Base
{
public:
void Run() { Execute(); }
private:
void DoDone(int code) { .... }
};
这里,Base
控制如何在Execute()
中使用它自己的方法和派生方法,并且派生类型只需要通过私有虚拟方法DoDone()
来实现该实现的一个组件。
基类方法可以非常简单地调用派生方法:
void Base::Execute()
{
Done(42);
}
要在派生类之前调用基类Done(),可以将其作为派生类方法中的第一条语句进行调用,也可以使用非虚拟习惯用法。
下面是一个在派生类方法顶部调用它的示例。这依赖于派生类来获得正确的结果。
void Derived::Done(int code)
{
Base::Done(code);
}
下面是一个使用非虚拟习语的例子:
class Base
{
void Done(int code){
// Do whatever
DoneImpl(); // Do derived work.
}
virtual void DoneImpl() { };
...
};
class Derived {
virtual void DoneImpl() {
// Do derived class work.
};
...
};
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 为什么此派生对象无法访问基类的后递减方法?
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 使用基类中的派生方法运行线程,而无需使用模板
- 是否可以使用基类非虚拟方法中的派生类虚拟方法?
- 在派生类中使用基类的私有成员变量的最佳方法
- 如何在从抽象基派生的类中实现相同的方法?
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 从基类实例调用派生类方法而不进行强制转换
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- C++ 使用派生类方法更改基类数据成员
- 如何使用派生类特定的方法:派生类中的派生成员
- 使用抽象类的指针访问派生类的方法;派生类似乎也是抽象的