typecasting和check是一个存在于向量中的实例
typecasting and check is an instance exists in a vector
我有一个虚拟类Shape。类Rectangle、Triangle、Circle继承自Shape并具有不同的特性(大小、边数…(。我想在一个结构中存储不同的形状(比如向量(。
所以我的矢量是:vector<Shape*> myvec;
我想知道如何知道一个给定的形状实例是否存在于向量中(例如:new Circle(diameter 10);
(。
我听说过动态演员阵容,但我完全不明白如何使用它?
class Shape
{
public:
Shape(){}
virtual int Size()=0;
virtual int Sides()=0;
virtual bool isequal(const Shape & rhs)=0;
int size,sides;
};
class Circle : public Shape
{
public:
Circle(int diameter):size(diameter)
{
sides=0;
}
bool isequal(const Circle &rhs)
{
return size==rhs.size;
}
int size,sides;
};
class Rectangle: public Shape
{
Rectangle(int nbsides,int size1,int size2 ): sides(nbsides),size1(size1),size2(size2){}
bool isequal(const Rectangle &rhs)
{
return (size1==rhs.size1 && rhs.size2==size2);
}
int sides,size1,size2;
};
dynamic_cast
正确:
Shape* shape = myvec[0];
Circle* circle = dynamic_cast<Circle*>(shape);
if(circle != nullptr)
; // it's a Circle! Do something circly.
else
; // it's not a Circle. Do something else.
但这个问题的更好答案是,在一个完美的世界里,你应该使用多态性,这样就很少有必要这样做了。
根据下面的附加注释,我认为您可能希望在Shape中使用纯虚拟isequal((,在各种实现中使用dynamic_cast
s(多态比较函数的内部是我可以使用dynamic_cast
而不必事后洗手的少数地方之一:(。
// edited out code that isn't directly relevant
class Shape
{
public:
virtual bool isequal(const Shape& rhs)=0;
};
class Circle : public Shape
{
public:
// snip
virtual bool isequal(const Shape &rhs) override
{
Circle* rhsAsCircle = dynamic_cast<Circle*>(&rhs);
if(rhsAsCircle == nullptr)
return false; // not a Circle; can't be equal
return size==rhsAsCircle->size;
}
};
然后在其他地方:
Circle searchCircle(10);
for(Shape* shape : myvec)
if(shape->isequal(searchCircle))
; // we have a match!
相关文章:
- 写入向量<向量<bool>>
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- C++在 2 个向量向量之间交换向量
- 使用 std::transform 将向量向量 (a) 添加到另一个向量向量 (b)
- 创建要在类中使用的向量向量,并使用 CERNROOT 绘制
- C++如何将字符数组转换为字节向量(向量<byte>)
- 向量向量的分割错误
- 关于在向量向量上使用基于范围的 for 循环
- 为什么我不能返回向量<向量<int>>(进程返回 -1073741819 (0xC0000005))
- C++如何为向量向量构建迭代器
- C++:向量<向量<int>>迭代器?
- 指针(指向指针)和新/malloc 向量(向量内部)c++
- 在每个向量<向量中查找最小/最大 x,y<Point>>
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- 为运算符编写模板<<适用于任何向量
- 对于作用于整数向量的循环行为异常
- 将条件应用于整个向量
- 使用模板将类函数应用于对象向量
- C++ 矢量复制适用于一个向量,但不适用于另一个向量