关于c ++:从父级调用子静态函数?

call child static function from parent?

假设我们有以下内容:

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

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

编辑:抱歉,让我添加更多信息。假设虚函数run()是大量的代码,它们本质上是相同的。父类和子类的唯一区别是我希望在向量栏中指定的值,因此重新定义子类中的虚拟函数似乎有点浪费。但是,如果重新定义child::bar并调用child::run(),则会使用parent::bar,因为它是在父类中定义的。在子类中,是否可以使用"vector parent::bar=parent::foo();"行"know"来使用"child::foo();"?


像往常一样。重写派生类中的基虚函数。

1
2
3
4
5
6
7
8
9
10
11
12
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::范围分辨率的基本版本:

1
2
3
4
5
6
7
8
int main() {

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

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

http://ideone.com/tdanq5


你对你的问题真的不怎么说,因此很难区分你需要什么和潜在的xy问题。

您的体系结构的一个潜在问题是,您有一个Parent和一个Child类,它们共享一个静态变量bar,但是您似乎对ParentChild类进行了不同的初始化。但是,只有一个bar由父对象和Child对象共享,独立于最后一个写入它的对象。

那么,当同时使用ParentChild对象时,您期望得到什么?你要找的答案取决于你的答案。特别是,如果您的答案是"它不是设计为让ParentChild对象同时操作",那么这两个类绝对不应该共享静态变量。


我不知道你到底想要什么。但是,您可以像这样重写静态函数,

1
2
3
4
5
class Child: public Parent
{
public:
   static bool foo() {return false;};
};