从普通函数调用虚拟函数
Virtual function call from a normal function
class base
{
public:
void virtual func(){cout<<"base";}
void check()
{
func();
}
};
class derived: public base
{
public:
void func(){cout<<"dervied";}
};
int main()
{
base *obj = new derived();
obj->check();
return 0;
}
上面的代码打印在控制台上派生。现在,我理解了虚函数的概念,但我无法在这里应用它。在我的理解中,每当我们调用虚拟函数时,编译器都会修改对"this->vptr->virtualfunc()"
的调用,这就是最重派生的类函数被调用的方式。但在这种情况下,由于check()
不是虚函数,编译器如何确定它需要调用派生func()
?
编译器如何确定它需要调用派生的 func()?
以相同的方式 - 通过调用this->vptr->virtualfunc()
.回想一下,即使在基类中,this
也属于派生类,因为每个派生类也是一个基类,因此访问虚函数的相同方法也适用于它。
正如您所说的那样,通过使用类成员中的vptr
。它知道函数是virtual
的,所以它知道它必须通过虚函数表来调用它。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 用纯虚拟函数兜圈子
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 禁止子函数调用父级的抽象(或虚拟)函数
- 无法在子类中使用虚拟函数C++
- 无法在派生对象上运行虚拟函数
- 我可以调用从 main() 覆盖的虚拟函数吗?
- 在 C++ 中将函数获取和设置为虚拟函数
- 使用在堆栈上创建的对象调用虚拟函数
- 为什么在这种情况下不调用我的虚拟函数实现?
- 在C++中使虚拟函数私有化
- 模板继承类中的虚拟函数
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- doxygenc++虚拟函数和实现
- 如何从派生类函数中调用虚拟函数