从父母调用子静态函数?

时间:2014-06-21 08:19:28

标签: c++ inheritance

假设我们有以下内容:

class Parent {
public:
     virtual void run() {
         for (int i = 0 ; i < bar.size() ; ++it)
              cout << i << "\n" ;
     };
protected:
     static vector<int> foo() {return vector r({1,2,3,4,5});};
     static vector<int> bar;
}
vector<int> Parent::bar = Parent::foo();

现在,如果我创建一个其外部调用run函数的子类,如何在仍然使用父运行函数时重新定义foo函数以返回其他内容?

编辑:抱歉让我添加更多信息。假设虚函数run()是很多代码,所有这些代码基本相同。父类和子类的唯一区别是我想在向量栏中指定的值,因此重新定义子类中的虚函数似乎有点浪费。但是,如果重新定义Child :: bar,并调用Child :: run(),则使用Parent :: bar,因为它在父类中定义。有没有办法让行#34; vector Parent :: bar = Parent :: foo();&#34;知道在Child类中使用&#34; Child :: foo();&#34;?

3 个答案:

答案 0 :(得分:1)

像往常一样。覆盖派生类中的基本虚函数。

class Parent {
public:
     virtual bool run() {return bar;};
     static bool foo() {return true;};
     static bool bar;
};

class Child: public Parent
{
public:
   static bool foo() { return false;};
};

然后,您仍然可以使用应用Base::范围解析的基本版本:

int main() {

    bool bc = Child::foo();
    bool bp = Parent::foo();

    std::cout << bc << bp;
    return 0;
}

http://ideone.com/TdaNQ5

答案 1 :(得分:0)

我不确定你到底想要什么。但是,您可以覆盖这样的静态函数,

class Child: public Parent
{
public:
   static bool foo() {return false;};
};

答案 2 :(得分:0)

你真的不太关心你的问题,因此很难区分你所需要的东西和可能的XY问题。

您的架构存在的一个潜在问题是,您有ParentChild个类共享一个静态变量bar但您似乎初始化它们ParentChild类不同。但是,父和bar对象共享只有一个Child,与最后写入它的人无关。

那么,当同时使用ParentChild个对象时,您有何期待?您寻找的答案取决于您对该答案的回答。特别是,如果您的答案是&#39;它的目的不是让ParentChild对象同时运行,那么这两个类绝对不应该共享一个静态变量。