代码之家  ›  专栏  ›  技术社区  ›  serkan ertas

有没有其他类访问子类函数的方法?

  •  0
  • serkan ertas  · 技术社区  · 1 年前

    我有超类A,以及它的子类B和C。

    我有D类,它的成员:

    A* aArray[20]
    

    但是在aArray中,只有B和C对象。

    我想实现一个函数来计算这个数组中B的数量,但我想不出有效的解决方案。

    我的解决方案是在每个类中编写getType函数,并检查它在D的函数中是否为“a”、“b”、“c”。

    例如,对于子类B:

    virtual char getType() const{
        return 'b'    
    };
    

    这是正确的实施方式吗?

    1 回复  |  直到 1 年前
        1
  •  1
  •   Christian Stieber    1 年前
    int countBs() const
    {
       int count=0;
       for (const A* item: aArray)
       {
          if (dynamic_cast<const B*>(item)) count++;
       }
       return count;
    }
    

    注意:这需要您有 virtual 类层次结构中的函数(至少是析构函数);你的 getType 函数已经存在。

    还要注意的是,这会计算以下对象 B ,或从中派生。如果需要 确切地 B、 使用 typeid() 相反

    注意:在大多数情况下,拥有一个原始指针的C数组是不好的-ish。你很可能想使用智能指针( std::unique_ptr ,很可能),或者 std::array 如果它真的是固定的20个项目,或者 std::vector 如果它是可变的。

    还要注意,像这样进行类型检查有时会感觉有点臭。不过,这样做可能有正当的理由。