C ++在元素数组上应用“类型”

时间:2018-07-08 14:14:48

标签: c++ polymorphism

编辑:这是学校的作业,我尚未确定此设计,所以请不要建议对其进行更改。

请考虑以下层次结构:

        A
       / \
     B     E
    /\ 
   C  D

我有一个指向A(A **)的指针数组,我需要创建两个方法:

  • 第一个对B类型的每个对象及其近亲进行计数。
  • 第二个只计算完全B类型的对象。

对于第一个,我正在使用以下代码:

int countTypeOfBs(A** arr, int size){
    int count = 0;
    for (int i = 0; i < size; i++)
        if (dynamic_cast<B *>(arr[i]))
            count++;
    return count;
}

我坚持使用第二个,我已经尝试过了:

int countBs(A** arr, int size){
    int count = 0;
    for (int i = 0; i < size; i++)
        if (!strcmp(typeid((*A[i])).name(), "B"))
                count++;
    return count;
}

但是我收到一个错误消息,表示表达式必须具有恒定值..

我该如何解决?

编辑:这是一个错字,我不小心使用了A[i]而不是arr[i]。它解决了这个问题。

1 个答案:

答案 0 :(得分:4)

typeid-operator可以应用于类型或表达式,并返回对适当的std::type_info对象的引用。可以简单地将它们与operator==进行比较以得出相等性。
该实现将知道引用相等是否足够,或者它需要进行字符串比较,因此请不要再犹豫了。