如何将子方法调用到父方法
How to call the child method into parent
我有这个代码:
class Parent {
public:
Parent() {
init();
}
virtual void function() {
std::cout<<"Parent function"<<std::endl;
}
private:
virtual void init() {
function();
}
};
class Child : public Parent {
public:
virtual void function() {
std::cout<<"child function"<<std::endl;
}
};
我想在创建 Child 实例时从 Parent 的 init 函数调用 Child 函数。在这种情况下,输出是"子函数"而不是"父函数"。
这是不可能的。
直接从构造函数调用的函数以非虚拟方式调用,当这些函数调用虚函数时,它们被虚拟调用,但虚拟调度将为父类选择函数。不能从父类构造函数调用派生类的函数。
从构造函数/析构函数调用的方法函数不会虚拟调用。
您可以创建工厂方法以允许虚拟调用init
class Parent {
protected:
Parent() {}
public:
virtual void function() {
std::cout<<"Parent function"<<std::endl;
}
template <typename T, typename ... Ts>
T MakeChild(Ts&&... args)
{
static_assert(std::is_base_of<Parent, T>::value, "!");
T child(std::forward<Ts>(args)...);
child.init();
return child;
}
private:
virtual void init() {
function();
}
};
相关文章:
- 如何强制从重写方法调用重写的方法基方法?
- C++:使用方法调用析构函数的顺序是什么?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 使用 object 中的方法调用带有 std::bind 和 std::function.target 的 C 样式函数
- 指向类方法调用的指针
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 是否有可以处理方法调用依赖关系的设计模式?
- 如何缩短C++中的方法调用?
- 从部分专用模板方法调用模板非静态方法
- 有没有办法禁止派生类中的基类方法调用?
- 为什么这C++只在编译器上编码一个不明确的方法调用Microsoft?
- 从父方法调用子方法
- 如何将子方法调用到父方法
- 虚拟函数在哪里使用 vpointer to vtable 来解析方法调用,非虚拟方法存储在哪里以及如何解析它们?
- 从静态方法调用静态函数指针
- 从同一类中的另一个方法调用方法时出错
- 方法调用意外地像 l 值一样起作用
- 无法从派生的一个方法调用基类方法
- 从类方法调用命名空间中名为 Same 的函数时,重载解析失败
- C 多线程JAVA JNI方法调用