【发布时间】:2014-06-21 08:19:27
【问题描述】:
假设我们有以下内容:
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 函数的同时返回其他内容?
编辑:对不起,让我添加更多信息。假设虚函数run()是很多代码,所有的代码本质上都是一样的。父类和子类的唯一区别是我要在向量栏中指定什么值,所以在子类中重新定义虚函数似乎有点浪费。但是,如果您重新定义 Child::bar,并调用 Child::run(),则会使用 Parent::bar,因为它是在父类中定义的。有没有办法让“vector Parent::bar = Parent::foo();”这一行知道在 Child 类中使用“Child::foo();”吗?
【问题讨论】:
-
我不知道你在问什么。你的意思是你想让
Child::foo()返回false? -
用更多信息编辑了这个问题,希望它会有所帮助
-
您能解释一下为什么
bar需要是静态的吗?覆盖静态值的子类化似乎有点奇怪。 -
我并没有严格地为 bar 变量进行子类化,还有许多其他继承的东西我没有包括在这个例子中。我想我不需要将其设为静态,然后我可以将其设为虚拟,尽管它对于任何实例都是相同的值。
标签: c++ inheritance