C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI相关的知识,希望对你有一定的参考价值。

1. RTTI用处

当想为具有继承关系的类实现相等运算符时。对于两个对象来说,如果他们的类型相同并且对应的数据成员取值相同,则我们说这两个类是相等的。

class Base {
    friend bool operator==(const Base&, const Base&);
    
	public:
	    // Base的接口成员
	protected:
	    virtual bool equal(const Base&) const;
	    // Base的数据成员和其他用于实现的成员
};
 
class Derived: public Base {
	public: 
	    // Derived的其他接口成员
	protected:
	    bool equal(const Base&) const;
	    // Derived的数据成员和其他用于实现的成员
};

1.1 类型敏感的相等运算符:

bool operator==(const Base &lhs, const Base &rhs)
{
    // 如果typeid不相同,则返回fallse; 否则虚调用equal
    // 当运算对象是Base的对象时调用Base::equal, 否则调用Derived::equal
    return typeid(lhs) == typeid(rhs) && lhs.equal(rhs);
}

1.2 虚equal函数

继承体系中的每个类都必须定义自己的equal函数,派生类的所有函数要做的第一件事情就是将实参的类型转换为派生类类型:

bool Derived::equal(const Base &rhs) const
{
    // 我们清楚两个类型是相等的, 所以转换不会抛出异常
    auto r = dynamic_cast<const Derived&>(rhs);
    // 执行比较两个Derived对象的操作并返回结果
}

1.3 基类equal函数:

bool Base::equal(const Base &rhs) const
{
    // 执行比较Base对象的操作    
}
 

以上是关于C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 19 特殊工具与技术)malloc 函数与 free 函数

C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配

C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI

C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid

C++ Primer 5th笔记(chap 19 特殊工具与技术)定位 new 表达式

C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针