考虑以下代码:
#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
吗? 最佳答案
您没有使用list
中的test
。您要声明一个新的list
,并在您的derived
构造函数中使用它。
另一方面,size()
正在使用list
中的test
。
如果要从test
内部添加到list
derived
,则应将test
的列表设为protected
,而不是私有的。并且您应该从list
中删除具有重复名称的derived
。