派生类中的方法调用算作虚函数调用吗?
Posted
技术标签:
【中文标题】派生类中的方法调用算作虚函数调用吗?【英文标题】:Do method calls in derived classes count as virtual function calls? 【发布时间】:2016-01-30 21:27:44 【问题描述】:假设我有一个抽象基类和一个像这样的派生类,
class Base
public:
virtual void doSomething() = 0;
class Derived: public Base
private:
void doSomethingSpecificA();
void doSomethingSpecificB();
public:
void doSomething();
然后我用
初始化我的派生类Base *instance = new Derived;.
现在,假设我将doSomething
的派生版本称为:
instance->doSomething();
和doSomething()
调用私有方法doSomethingSpecificA()
和doSomethingSpecificB()
。这些对specific
函数的内部调用是否需要与对doSomething()
的原始调用所需的相同数量的vtable 工作?还是它们仅相当于一个标准的方法调用?
【问题讨论】:
doSomethingSpecificA
和 doSomethingSpecificB
不是虚函数,首先在 vtable 中没有它们的条目。对它们的调用是常规方法调用。检查生成的程序集,自己看看。
【参考方案1】:
这些对特定函数的内部调用是否需要与最初调用 doSomething() 所需的相同数量的 vtable 工作?
没有。对doSomethingSpecificA
和doSomethingSpecificB
的调用不涉及查找/动态调度,因为它们不是虚拟成员函数。
或者它们是否等同于标准方法调用?
是的。
【讨论】:
以上是关于派生类中的方法调用算作虚函数调用吗?的主要内容,如果未能解决你的问题,请参考以下文章
delphi中覆盖override父类的静态方法和虚函数有啥不同?
派生类中的静态方法可以在 C++ 中调用受保护的构造函数吗?