- RTTI相关问题
- 概念:什么是RTTI?运行时类型识别。什么是dynamic_cast?将基类的指针或引用转换成同一继承层次中的其他类型的指针或引用。什么是typeid?返回某个对象的类型id。
- 应用:Shape是基类,Point, Line是子类,因要比较任意对象是否相等,问如何实现较好?
class Shape
{
friend bool operator == (const Shape& s1, const Shap& s2);
{
return typeid(s1)==typid(s2) && s1.IsEqual(s2);
}
virtual bool IsEqual(const Shape& s) const
{
...
}
}
class Point : public shape
{
friend bool operator == (const Shape& s1, const Shap& s2);
bool IsEqual(const Shape& s) const
{
if (const Point* pPoint = dynamic_cast<const Point*>(&s))
{
...
}
else
{
return false;
}
}
} - 原理:vtable的地址vptr是由编译器插入到class声明中的,一般作为类的第一个成员,类类型信息同虚函数一样,占用vtable其中一项。当定义某个类的对象是,构造函数将vptr初始化。当使用RTTI操作符时,动态的查询vtable获取类型。
面试备选题目
最新推荐文章于 2025-05-02 18:18:04 发布