我是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()会发生什么?什么在这里被清除?
答案 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();
。