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

时间:2010-09-01 13:51:52

标签: c++

所以,今天我发现这句话,任何人都可以解释一下吗?

“如果您认为C ++并不过分复杂,那么什么是受保护的抽象虚拟基础纯虚拟私有析构函数?您最后一次需要它时是什么时候? - 汤姆卡吉尔“

5 个答案:

答案 0 :(得分:18)

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

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

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

同时将两个不同的东西串在一起以试图使事情变得复杂化,这表明作者只是试图让人们混淆,试图找出一个实际上并不存在的观点。

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

我也没想到:

  

受保护的抽象虚拟基础纯虚拟私有析构函数以及上次何时需要一个

我想:

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

答案 3 :(得分:2)

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

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

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

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

答案 4 :(得分:2)

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

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

Meyers's interpretation.