基类和派生类中具有相同名称的静态成员变量

时间:2016-12-08 13:00:41

标签: c++ c++11

class Base {
   static std::vector<std::string> filter;

   virtual bool check() {
      if(std::find(filter....))
   }
}

class Derived : public Base {
   static std::vector<std::string> filter;

   bool check() override {
      if(std::find(filter....))
   }
}

假设两个静态变量都以各自的平移单位定义。

我有一个静态字符串向量,它在基类和派生类中带有相同的名称,因为它们只是为每个类带有不同值的相同类型的信息。我知道隐藏非虚拟函数的名称并不是一个好主意。这同样适用于静态成员变量吗?如果有的话有什么替代方案?

1 个答案:

答案 0 :(得分:1)

是的,避免影响非虚拟功能的所有相同原因都适用于(空虚的非虚拟)成员;

我将假设Derived中的check()覆盖在文本上与Base的覆盖相同。

您可以改为使用静态本地的虚拟方法

class Base 
{
    // ...

    virtual /*const?*/ std::vector<std::string> & filter() 
    {
        static std::vector<std::string> value = ...
        return value;
    }
    bool check() // final
    {
        if(std::find(filter()...))
    }
}

class Derived : public Base
{
    /*const?*/ std::vector<std::string> & filter() // override
    {
        static std::vector<std::string> otherValues = ...
        return otherValues;
    }
}