为什么在此代码中使用class关键字?

use*_*462 5 c++ parameters class keyword

以下是使用Composite模式进行简单算术的C++示例解析器的一部分.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

// abstract base class E
class E {
public:
    // pure virtual member function
    // = 0  means no implementation, only type
    virtual int eval() = 0;
    // virtual destructor
    virtual ~E();
};

// derived class for plus tree nodes

class plus : public E {
    class E *e1;
    class E *e2;
public:
    plus(class E *e1, class E * e2)
    {
        this->e1 = e1;
        this->e2 = e2;
    }
    ~plus();
    int eval();
};
Run Code Online (Sandbox Code Playgroud)

我不明白它的plus(class E *e1, class E * e2)作用.如果E是一个类,那么肯定它不需要以class关键字作为前缀,在我的理解中它只用于定义新类?为什么函数参数中使用了class关键字?

此外,当我删除class关键字以产生以下类定义时:

class plus : public E {
    E *e1;
    E *e2;
public:
    plus(E *e1, E * e2)
    {
        this->e1 = e1;
        this->e2 = e2;
    }
    ~plus();
    int eval();
};
Run Code Online (Sandbox Code Playgroud)

代码(我的意思是class删除关键字的所有看似不必要的事件的整个代码,而不仅仅是我在这里提供的代码段)仍然编译,构建和运行,看似正常.class这里使用关键字的原因是什么?