C++ 派生类中的方法调用是否算作虚拟函数调用?
假设我有一个抽象基类和一个派生类C++ 派生类中的方法调用是否算作虚拟函数调用?,c++,C++,假设我有一个抽象基类和一个派生类 class Base { public: virtual void doSomething() = 0; } class Derived: public Base { private: void doSomethingSpecificA(); void doSomethingSpecificB(); public: void doSomething(); } 我用 Base *instance = new Derived;.
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()
调用私有方法dosomethingsspecifica()
和dosomethingsspecificb()
。对特定
函数的这些内部调用是否需要与原始调用doSomething()
所需的vtable工作量相同?或者它们仅仅等同于一个标准方法调用
对特定函数的这些内部调用是否需要与对doSomething()的原始调用相同的vtable工作量
否。对
doSomethingSpecificA
和doSomethingSpecificB
的调用不涉及查找/动态分派,因为它们不是虚拟成员函数
或者它们仅仅等同于一个标准方法调用
是。
dosomethingsspecifica
和dosomethingsspecificb
不是虚拟函数,vtable中首先没有它们的条目。对它们的调用是常规方法调用。检查生成的部件,请参见。