【发布时间】:2011-05-05 15:54:07
【问题描述】:
你好,
如果它是重复的,我很抱歉,但我无法在这里找到我的问题的答案。
假设我们在 c++ 中有以下类结构:
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b; }
};
class CRectangle: public CPolygon {
public:
int area ()
{ return (width * height); }
};
现在我有一个指向 CPolygon 对象的指针。如何检查它是否实际上是指向 CRectangle 类对象的指针?
【问题讨论】:
-
另一方面,您应该考虑不这样做。如果您认为需要这样做,那么您的设计可能有问题。
-
多态性不是这样工作的。多态性意味着无需检查。
-
有正当的理由想知道多态类的具体类型;也就是说,它们很少而且相差甚远。知道如何检查具体类型是很好的;很高兴知道必须这样做通常是一个不好的迹象。
-
@Armen:我不完全同意个人的一点,只要你公开代码就不再是个人的了。总有一天会有人从这个烂摊子中继承下来。
-
@Armen:我明白,而且我承认一个字母的前缀并不多,但接下来我们会得到
class ClassPolygon;、void FunctionAdd(int,int)等......另外,做您在struct前加上C或S?如果有人改变了种类而不是前缀怎么办?这可能会让人感觉很私人,但冗余会导致不一致。
标签: c++ object polymorphism