如何在给定此定义的情况下创建类的实例

时间:2017-10-13 16:03:41

标签: c++

我得到了一个名为lexer.h的头文件,它预定义了一个名为Token的类。但是,我不理解构造函数。如果给出lexer.h,我将如何创建TokenType = T_ID的令牌实例,lexeme =“this”,lnum = 2?谢谢!

#ifndef LEXER_H_
#define LEXER_H_

#include <string>
#include <iostream>
using std::string;
using std::istream;
using std::ostream;

enum TokenType {
        // keywords
    T_INT,
    T_STRING,
    T_SET,
    T_PRINT,
    T_PRINTLN,

        // an identifier
    T_ID,

        // an integer and string constant
    T_ICONST,
    T_SCONST,

        // the operators, parens and semicolon
    T_PLUS,
    T_MINUS,
    T_STAR,
    T_SLASH,
    T_LPAREN,
    T_RPAREN,
    T_SC,

        // any error returns this token
    T_ERROR,

        // when completed (EOF), return this token
    T_DONE
};

class Token {
    TokenType   tt;
    string      lexeme;
    int     lnum;

public:
    Token(TokenType tt = T_ERROR, string lexeme = "") : tt(tt), lexeme(lexeme) {
        extern int lineNumber;
        lnum = lineNumber;
    }

    bool operator==(const TokenType tt) const { return this->tt == tt; }
    bool operator!=(const TokenType tt) const { return this->tt != tt; }

    TokenType   GetTokenType() const { return tt; }
    string      GetLexeme() const { return lexeme; }
    int             GetLinenum() const { return lnum; }
};

extern ostream& operator<<(ostream& out, const Token& tok);

extern Token getToken(istream* br);


#endif /* LEXER_H_ */

2 个答案:

答案 0 :(得分:1)

由于构造函数中的默认参数,可以通过三种方式创建token类型的对象。

Token A(T_ID, "this");
Token B(T_STRING);
Token C;

后两个将具有de构造函数中定义的成员变量。

答案 1 :(得分:0)

该类有点时髦,因为它从外部变量初始化lnum。它真的应该来自​​构造函数的参数。但是既然如此,你就无法控制它,除了设置lineNumber的值,这可能不是预期的;它的值可能来自处理输入的任何地方,并在每个新行增加。

因此,要创建该类型的对象,只需执行此操作:

Token t(T_ID, "this");