在C++中,给出纯虚函数的实现是合法的:
class C { public: virtual int f() = 0; }; int C::f() { return 0; }
你为什么要这样做?
相关问题:C++ faq lite包含一个例子:
class Funct { public: virtual int doit(int x) = 0; virtual ~Funct() = 0; }; inline Funct::~Funct() { } // defined even though it's pure virtual; it's faster this way; trust me
我不明白为什么析构函数被声明为纯虚拟然后实现; 我不明白为什么这应该更快的评论.
必须始终实现声明的析构函数,因为实现将它们作为派生对象销毁的一部分进行调用.
如果它们提供有用的通用功能但总是需要专门化,则可以实现其他纯虚函数.在这种情况下,通常派生类实现将对基本实现进行显式调用:
void Derived::f() { Base::f(); // Other Derived specific functionality }
通常,如果需要使类抽象(即防止创建非派生实例),则将析构函数设为虚拟,但该类没有其他自然纯虚拟的函数.我认为'相信我它更快'是指这样一个事实:因为析构函数被称为派生对象清理的一部分不需要使用vtable查找机制,所以可以利用内联实现,与典型的虚函数调用不同.