有问题了解这个构造函数做了什么

时间:2016-04-26 01:16:15

标签: c++

有人可以解释一下这里发生了什么吗?这个构造函数是关于什么的?什么是RetType?虚拟意味着什么?我感到很困惑。如果有可能在网上聊天帮助,我会非常高兴。

class Traversal { 
public:
    virtual ~Traversal(){};
public:
    typedef enum {
        Stop, Continue, Skip,
        LastRetType
    } 
    RetType;
    virtual RetType pre(PDTAdd & d) { 
        return Continue;
    }


};

2 个答案:

答案 0 :(得分:3)

您的样本中没有构造函数。有:

  • 一个什么都不做的析构函数。

  • 一个名为 System.out.print("Enter the numbers here: "); Scanner gc = new Scanner(System.in); int firstNumber = gc.nextInt(); int SecondNumber = gc.nextInt(); 的类型的定义,因此可以定义该类型的变量,而不必在任何地方重复枚举定义。

  • 返回RefType类型值的函数。

如果您可以将枚举定义为任何地方的类型,那么代码将与此相同:

RefType

看看函数的返回类型如何是一个巨大的枚举?您的示例为该类型指定了名称class Traversal { public: virtual ~Traversal(){}; public: virtual enum { Stop, Continue, Skip, LastRetType } pre(PDTAdd & d) { return Continue; } }; ,因此您无需在声明变量的任何位置重复枚举定义。在各地定义枚举将是一件坏事,因此C ++不允许这样做 - 这就是typedef存在的原因。

基本上,由于您无法直接在RefType语句中创建新类型(structclassenum),因此会提前定义枚举如return,然后RefType用作返回类型。

RefTypeRetType语句的一部分,它只是跨越多行。作为一行,它看起来像这样:

typedef

答案 1 :(得分:2)

...首先

    typedef enum {
        Stop, Continue, Skip,
        LastRetType
    } 
    RetType;

......说话的方式很差......

    enum RetType {
        Stop, Continue, Skip,
        LastRetType
    };

...只创建一个enum类型,可以采用列出的值(Stop默认为0Continue1等。 )。

pre功能......

    virtual RetType pre(PDTAdd & d) { 
        return Continue;
    }

...然后返回任何这些值 - 在其上方硬编码Continue

虽然它是virtual,这意味着派生类可以编写自己的函数覆盖,如果有人有Traversal* pTraversal& r实际引用了这样的实例派生类,它将是提供覆盖(如果有)的函数由p->pre(d)r.pre(d)运行的派生程度最高的类。这称为虚拟调度,是C ++支持运行时多态的方式,这是面向对象编程的基本功能之一。

你的下一步应该是一本好书或教程。