Tag: 虚函数

C ++和Java中的虚函数

我一直在读虚拟function,发现, VF用于inheritance类的多态性。 因此,如果类和派生类都具有相同的函数名,则VF会将相应的函数绑定到函数调用。 即如果所讨论的函数在基类中被指定为虚拟,则将调用派生类的函数。 如果它不是虚拟的,则将调用基类的函数。 默认情况下,在Java中:所有函数都是Virtual C ++:非虚拟,可以使用final,private访问修饰符在Java中使用Virtual,而在C ++中使用Virtual关键字将函数设置为虚拟。 基于以上理论,我写了代码: #include class base{ public : virtual void function1(){ std::cout<<"BaseVirtual"<<std::endl; } void function2(){ std::cout<<"Base NonVirtual"<<std::endl; } }; class derieved: public base { public : void function1(){ std::cout<<"Derieved Virtual"<<std::endl; } void function2(){ std::cout<<"Derieved NonVirtual"<<std::endl; } }; int main() { base b1; derieved d1; b1.function1(); b1.function2(); d1.function1(); d1.function2(); […]

为什么虚拟function不能过度使用?

我刚刚读到我们不应该过度使用虚函数。 人们认为虚拟function越少,错误越少,维护也越少。 由于虚函数会出现什么样的缺陷和缺点? 我对C ++或Java的上下文感兴趣。 我能想到的一个原因是由于v表查找,虚函数可能比正常函数慢。

虚拟表/调度表

根据我所知的CPP,每个class级都有自己的vtable。 但是这个维基百科链接提到: 对象的调度表将包含对象的动态绑定方法的地址。 通过从对象的调度表中获取方法的地址来执行方法调用。 对于属于同一类的所有对象,调度表是相同的,因此通常在它们之间共享。 有人可以请一些亮点。 谢谢 !