假设我们有以下内容:
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;?
答案 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;
}
答案 1 :(得分:0)
我不确定你到底想要什么。但是,您可以覆盖这样的静态函数,
class Child: public Parent
{
public:
static bool foo() {return false;};
};
答案 2 :(得分:0)
你真的不太关心你的问题,因此很难区分你所需要的东西和可能的XY问题。
您的架构存在的一个潜在问题是,您有Parent
和Child
个类共享一个静态变量bar
但您似乎初始化它们Parent
和Child
类不同。但是,父和bar
对象共享只有一个Child
,与最后写入它的人无关。
那么,当同时使用Parent
和Child
个对象时,您有何期待?您寻找的答案取决于您对该答案的回答。特别是,如果您的答案是&#39;它的目的不是让Parent
和Child
对象同时运行,那么这两个类绝对不应该共享一个静态变量。