C++ 预期的等价性:数据表达式和类型表达式的typeid
我有从基类a派生的多态类:C++ 预期的等价性:数据表达式和类型表达式的typeid,c++,polymorphism,typeid,equivalence,C++,Polymorphism,Typeid,Equivalence,我有从基类a派生的多态类: class A { public: virtual void fV() { } }; class B : public A { public: void mB() { } }; class C : public A { public: void mC() { } }; 现在,我想迭代指向此类对象的数组,并检查类型等价性: A *array[4] = { new B, new C, new C, new B }; for(int i = 0
class A {
public:
virtual void fV() { }
};
class B : public A {
public:
void mB() { }
};
class C : public A {
public:
void mC() { }
};
现在,我想迭代指向此类对象的数组,并检查类型等价性:
A *array[4] = { new B, new C, new C, new B };
for(int i = 0; i < 4; ++i) {
cout << i + 1 << ". " ;
(typeid(array[i]) == typeid(A)) ? cout << 1 << ' ': cout << 0 << ' ';
(typeid(*array[i]) == typeid(B)) ? cout << 1 << ' ': cout << 0 << ' ';
(typeid(*array[i]) == typeid(C)) ? cout << 1 << ' ': cout << 0 << ' ';
cout << endl;
}
我希望在第一个条件中有一个类型等价性,但结果是比较失败(第一列中为0)。第二个和第三个条件的结果和我预期的一样
第一个条件有什么问题?您的数组被定义为
A*array[4]
。因此,array[i]
的类型将是A*
因此,对于第二列(索引后的第一列):
将始终为false(即第二列中的0)typeid(数组[i])==typeid(A)
始终为真(即第二列中的1)typeid(数组[i])==typeid(A*)
如果数组中有一个新的A项,则可能为true李>typeid(*array[i])==typeid(A)
注意:您检查的类型等价是严格的类型等价。这只适用于精确匹配。这意味着对于第二列,对于从B派生的对象,测试将失败。也许这就是您正在寻找的,并且很好。但是,如果您只想检查是调用
mB()
还是mC()
,这将严重限制多态设计的可扩展性。另外,您可以考虑使用<代码> DyrimCysCase<代码>,并检查它是否返回null pTR或不 您的数组定义为<代码> a*数组[4 ] < /代码>。因此,array[i]
的类型将是A*
因此,对于第二列(索引后的第一列):
将始终为false(即第二列中的0)typeid(数组[i])==typeid(A)
始终为真(即第二列中的1)typeid(数组[i])==typeid(A*)
如果数组中有一个新的A项,则可能为true李>typeid(*array[i])==typeid(A)
注意:您检查的类型等价是严格的类型等价。这只适用于精确匹配。这意味着对于第二列,对于从B派生的对象,测试将失败。也许这就是您正在寻找的,并且很好。但是,如果您只想检查是调用
mB()
还是mC()
,这将严重限制多态设计的可扩展性。另外,您可以考虑使用<代码> DyrimCysCase<代码>,并检查它是否返回Null pTR或谢谢您,克里斯多夫!很好,谢谢你,克里斯托夫!很好。
1. 0 1 0
2. 0 0 1
3. 0 0 1
4. 0 1 0