据我所知,它提供了派生类可以覆盖的默认实现。 但这是真正的目的吗?
答案 0 :(得分:10)
不,这不是他们的确切目的。虚函数是以面向对象语言实现type polymorphism的手段。
答案 1 :(得分:2)
是的,这是确切的目的
答案 2 :(得分:2)
现在,您可以拥有对基类对象的引用集合,并在此处引用派生类对象,通过任何引用调用虚函数,而无需知道实际派生类,并且每次都调用最多派生的覆盖函数。这就是所谓的多态性。
答案 3 :(得分:2)
需要派生类可以覆盖,并且它的行为与您期望的一样。
相反的是,在派生类上创建方法时,指定new关键字 - 在这种情况下,使用与变量类型匹配的函数的版本,因此:
derived foo = new derived();
base foo2 = foo;
foo2.bar(); // If bar() is virtual, and overriden in derived, it will use that implementation.
foo.bar(); // if bar() is not virtual, this may be calling a completely different function, if derived defines a new version
答案 4 :(得分:1)
实现多态性。