primer C++筆記
運作時類型識别

dynamic_cast運算符
指針類型的dynamic_cast
引用類型的dynamic_cast
typeid運算符
使用typeid運算符
//vs2017
//Base不含虛函數:
typeid(*bp) : class Base
typeid(*dp) : class Derived
typeid(bp) : class Base *
typeid(dp) : class Derived *
//Base含虛函數時:
typeid(*bp) : class Derived
typeid(*dp) : class Derived
typeid(bp) : class Base *
typeid(dp) : class Derived *
使用RTTI
class Base
{
friend bool operator==(const Base&, const Base&);
protected:
virtual bool equal(const Base&) const;
};
class Derived : public Base
{
protected:
virtual bool equal(const Base&) const;
};
//整體的相等運算符
bool operator==(const Base &lhs, const Base &rhs)
{
return typeid(lhs) == typeid(rhs) && lhs.equal(rhs);
}
bool Derived::equal(const Base & rhs) const
{
auto r = dynamic_cast<const Derived &>(rhs);
//執行比較Derived對象的操作
cout << "Derived::equal exec()" << endl;
}
bool Base::equal(const Base & rhs) const
{
//執行比較Base對象的操作
cout << "Base::equal exec()" << endl;
}