繁体   English   中英

c ++,protected abstract virtual base pure virtual private destructor

[英]c++, protected abstract virtual base pure virtual private destructor

所以,今天我发现这句话,有人能解释一下吗?

“如果您认为C ++并不过分复杂,那么什么是受保护的抽象虚拟基础纯虚拟私有析构函数,以及您最后一次需要它的时间? - Tom Cargill”

我相信它是一个私有的纯虚拟析构函数 (我认为这部分是不言自明的),它是抽象基类的一部分 ,你通过受保护的虚拟继承使用它。

 class Base
 {
    private:
        virtual ~Base() = 0;   /* A */
 };

 class Derived : protected virtual Base
 {
    private:
     ~Derived () {.......}    /* B */
 };

从标记B的角度来看,标记A处的行是“受保护的抽象虚拟基础纯虚拟私有析构函数”,

这三个部分中的每一个都有其各自的用途。 我不知道需要上述三个部分的设计模式,但没有什么能阻止它们一起使用。

不确定原始上下文,但我的猜测是有人声称C ++不像Java那样复杂。 Tom的观点是C ++具有足够的功能,您可以轻松地创建非常复杂的构造。

这些话似乎有道理但不是真的。

同时将两个不同的东西串在一起以试图使事情复杂化是一个迹象,表明作者只是试图混淆人们试图找出一个并非真正存在的观点。

我们应该注意到每种情况都是唯一的,您可以根据情况的需要构建类层次结构和析构函数。 调用语言过于复杂,因为它提供的设施很愚蠢。 它就像说私人继承的意义。 是的,通常你不打算使用它,但是有一个很好的机会。

我也没想到:

受保护的抽象虚拟基础纯虚拟私有析构函数,以及您最后一次需要的时间

我认为:

  1. 我的班级很抽象
  2. 析构函数必须是虚拟的。
  3. 但我不需要实现,所以它是纯粹的
  4. 我将使用受保护的继承

斯科特迈耶斯也有他的答案:

https://youtu.be/ltCgzYcpFUI?t=7m25s

迈耶斯的解释。

基本上,他只是将一堆单词拼凑在一起并将它们粘在一起而没有意识到它们实际上是指不同的东西,或者经常是同一件事。

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 {
};

当然,纯虚拟与抽象相同。

这是非常完整和完全夸张的人写的,他不知道他在说什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM