我有Set一個由動態分配的類組成,IShape其中IShape由 Square、Rectangle 等繼承,我需要使用過濾器功能來創建僅特定型別(例如 Squares)的新集合。基本上是通過現有的集合并只選擇以某種方式定義的形狀(通過引數?)并創建該形狀的新集合。這怎么可能?
uj5u.com熱心網友回復:
為避免使用dynamic_cast,讓您的IShape類宣告一個名為 (say) 的純虛函式GetTypeOfShape。然后在每個派生類中覆寫它以回傳每個表示的形狀型別(例如enum,作為)。然后你可以在你的過濾器功能中測驗它并相應地進行。
示例代碼:
#include <iostream>
class IShape
{
public:
enum class TypeOfShape { Square, Rectangle /* ... */ };
public:
virtual TypeOfShape GetTypeOfShape () = 0;
};
class Square : public IShape
{
public:
TypeOfShape GetTypeOfShape () override { return TypeOfShape::Square; }
};
class Rectangle : public IShape
{
public:
TypeOfShape GetTypeOfShape () override { return TypeOfShape::Rectangle; }
};
// ...
int main ()
{
Square s;
Rectangle r;
std::cout << "Type of s is: " << (int) s.GetTypeOfShape () << "\n";
std::cout << "Type of r is: " << (int) r.GetTypeOfShape () << "\n";
}
輸出:
s 的型別是:0
r 的型別是:1
現場演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/386258.html
上一篇:為什么這個字串沒有轉換為整數?
