有人可以解释一下这里发生了什么吗?这个构造函数是关于什么的?什么是RetType?虚拟意味着什么?我感到很困惑。如果有可能在网上聊天帮助,我会非常高兴。
class Traversal {
public:
virtual ~Traversal(){};
public:
typedef enum {
Stop, Continue, Skip,
LastRetType
}
RetType;
virtual RetType pre(PDTAdd & d) {
return Continue;
}
};
答案 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
语句中创建新类型(struct
,class
或enum
),因此会提前定义枚举如return
,然后RefType
用作返回类型。
RefType
是RetType
语句的一部分,它只是跨越多行。作为一行,它看起来像这样:
typedef
答案 1 :(得分:2)
...首先
typedef enum {
Stop, Continue, Skip,
LastRetType
}
RetType;
......说话的方式很差......
enum RetType {
Stop, Continue, Skip,
LastRetType
};
...只创建一个enum
类型,可以采用列出的值(Stop
默认为0
,Continue
为1
等。 )。
pre
功能......
virtual RetType pre(PDTAdd & d) {
return Continue;
}
...然后返回任何这些值 - 在其上方硬编码Continue
。
虽然它是virtual
,这意味着派生类可以编写自己的函数覆盖,如果有人有Traversal* p
或Traversal& r
实际引用了这样的实例派生类,它将是提供覆盖(如果有)的函数由p->pre(d)
或r.pre(d)
运行的派生程度最高的类。这称为虚拟调度,是C ++支持运行时多态的方式,这是面向对象编程的基本功能之一。
你的下一步应该是一本好书或教程。