【发布时间】:2019-11-08 16:42:17
【问题描述】:
考虑以下代码:
#include <list>
#include <iostream>
class test{
private:
std::list<double> lst;
public:
int get_size(){
return lst.size();
}
};
class derived : public test{
private:
std::list<double> lst;
public:
derived(int u=8){
for (int k =0 ; k < u; ++k){
int n = lst.size();
lst.push_back(0);
}
}
};
int main(){
derived obj = derived();
std::cout << obj.get_size() << "\n";
return 0;
}
我试图理解为什么上面代码的输出不是8。我认为继承的想法允许人们在派生类中使用基类的成员函数,但似乎这在这里并不适用。当然我可以在基类中创建get_size函数virtual,然后将代码复制粘贴到派生类中并添加override,但这看起来很奇怪,因为在这种情况下我可以重新实现无论如何,函数......那么有人可以解释一下我们需要如何修改上面的代码以获得输出8吗?
【问题讨论】:
-
您不能对成员变量重载或使用多态。
get_size函数只知道test类,因此使用test::lst。 -
@Someprogrammerdude 所以你实际上必须将函数复制到派生类中?没有其他办法解决这个问题吗?
-
您可以创建
test::lstprotected并删除derived::lst成员吗?
标签: c++ class inheritance