今天我发现了这个引语,有人能解释一下吗?
"如果你认为C++不是过于复杂的,那么什么是protected abstract virtual base pure virtual private destructor,你上一次需要它是什么时候呢? —— Tom Cargill"
今天我发现了这个引语,有人能解释一下吗?
"如果你认为C++不是过于复杂的,那么什么是protected abstract virtual base pure virtual private destructor,你上一次需要它是什么时候呢? —— Tom Cargill"
我认为这是一个私有纯虚析构函数(我认为这部分很容易理解),它是一个抽象基类的一部分,你通过受保护的虚拟继承使用了它。
class Base
{
private:
virtual ~Base() = 0; /* A */
};
class Derived : protected virtual Base
{
private:
~Derived () {.......} /* B */
};
从标签B的角度来看,标签A上的这行代码是一个 "protected abstract virtual base pure virtual private destructor"。
这三个部分分别具有它们自己的用途。我不知道有哪种设计模式需要以上三个部分的全部内容,但没有什么阻止它们同时使用。
~Derived()
无法访问~Base()
。(注:~Base()
是纯虚拟的并不意味着它没有实现体。) - Ben Voigt= 0
),但仍然具有定义并且可调用。这正是像这样的析构函数发生的情况,因为它始终至少获得自动生成的定义。 - Jan Hudec~Base
的显式主体) - Neil Kirk不确定原始上下文,但我猜测是有人声称C++比Java等语言更简单。汤姆的观点是,C++拥有足够多的功能,使您可以轻松地创建非常复杂的结构。
protected abstract virtual base
class Base { // BASE
virtual something() = 0; // ABSTRACT
};
class Derived : protected virtual Base { // PROTECTED VIRTUAL
};
纯虚析构函数
这也很简单。
class Base { // BASE
private:
virtual ~Base() = 0; // pure virtual, private, destructor
};
class Derived : Base {
};
当然,纯虚函数与抽象函数是相同的。
很明显,这是由一个对自己所写内容一无所知的人完全夸大其词。
protected abstract virtual base pure virtual private destructor and when was the last time you needed one
。我认为 1) 我的类是抽象的 2) 析构函数必须是虚函数 3) 但我不需要实现所以它是纯虚函数 4) 我将使用受保护的继承。 - Martin York