考虑以下代码:

#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

08-03 21:56
查看更多