b / w 虚函数和纯虚函数的确切区别是什么?我们应该在哪种情况下使用这些函数?
答案 0 :(得分:2)
纯虚函数就是这样声明的函数:
class Foo {
virtual void bar() = 0;
};
bar
是Foo
的纯虚拟成员。它没有实现(因此= 0
),并且无法调用。任何继承自Foo
的类必须为bar
提供实现。这是唯一的区别:父类没有纯虚拟的实现,因此派生类必须提供它。 (这是一个例外,但它很少使用。)
否则,它的工作原理完全相同。给出:
class Baz : public Foo {
virtual void bar() {}
};
可以使用Baz
类型的指针访问Foo*
的任何实例,并调用Baz::bar
。如果Foo::bar
是纯虚拟的,则Foo
无法实例化,并且对Foo::bar
的调用将是错误。如果Foo::bar
不是纯粹的,那么将为Foo::bar
的实例调用为Foo
提供的实现,并且将调用Baz::bar
的实例Baz
,即使是通过Foo*
。
(Pure虚拟机也可以有实现,例如,Baz::bar
可以调用Foo::bar
,但这种情况并不常见。)
答案 1 :(得分:0)
虚拟功能有一个功能体。
可以通过Vartual函数完成重载。
定义为:Virtual int runFun();
,而
Pure Vartual Function具有功能体。
必须在Pure Vartual功能中重载。
定义为:Virtual int runFun()= 0;