是否使用typedef创建成员

时间:2016-07-01 13:39:00

标签: c++ typedef

我是C ++编程的新手。所以这个问题对你来说可能听起来很傻。

class ABCD : public VectorS<UINT8, 50>
{
private:
    typedef VectorS<UINT8, 50> XYZ;
    float m_length; 
    float m_angle;

    inline void append_check (const Point2D& pt)
    {
        if (!full())
        {
            push_back (pt);
        }
    }

public:
    typedef Point2Df Point;

    ABCD() : m_length(0), m_angle(0) {}

    void copy (const ABCD& def)
    {
        XYZ::operator=(def);
        m_length = def.getLength();
        m_angle = def.getAngleBound();
    }

    void clear (void)
    {
        XYZ::clear();
    }

}

这里的XYZ的typedef会发生什么?是否会使用此typedef创建矢量?我看不到创建XYZ类型的任何成员变量。 XYZ :: clear()会发生什么?什么在这里被清除?

3 个答案:

答案 0 :(得分:1)

此代码使用typedef为其父类VectorS<UINT8, 50>创建一个较短的名称。

void clear (void)
{
    XYZ::clear();
}

相同
void clear (void)
{
    VectorS<UINT8, 50>::clear();
}

相同
void clear (void)
{
    this->VectorS<UINT8, 50>::clear();
}

即。它调用从其父类继承的clear方法。

答案 1 :(得分:1)

在此声明中

typedef VectorS<UINT8, 50> XYZ;

XYZ被声明为类型VectorS<UINT8, 50>.

的别名

Vector均未创建。

名称本身就是该类的成员。

顺便说一下,在方法

中使用了这个别名
void copy (const ABCD& def)
{
    XYZ::operator=(def);
    ^^^^
    m_length = def.getLength();
    m_angle = def.getAngleBound();
}

相同
void copy (const ABCD& def)
{
    VectorS<UINT8, 50>::operator=(def);
    ^^^^^^^^^^^^^^^^^^
    m_length = def.getLength();
    m_angle = def.getAngleBound();
}

答案 2 :(得分:0)

typedef VectorS<UINT8, 50> XYZ;编写XYZ后,它将被解释为VectorS<UINT8, 50>

XYZ::clear();将被解释为VectorS<UINT8, 50>::clear();