C++ 继承成员函数的意外输出

C++ 继承成员函数的意外输出,c++,class,inheritance,C++,Class,Inheritance,考虑以下代码: #include <list> #include <iostream> class test{ private: std::list<double> lst; public: int get_size(){ return lst.size(); } }; class derived : public test{ private:

考虑以下代码:

#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;
}
#包括
#包括
课堂测试{
私人:
std::列表lst;
公众:
int get_size(){
返回lst.size();
}
};
派生类:公共测试{
私人:
std::列表lst;
公众:
导出(int u=8){
对于(int k=0;kstd::cout派生类中的
lst
与基类中使用的不同

您应该在
测试
基类中设置
lst
受保护
而不是
私有

然后,您可以在派生类中使用相同的变量。当然,您还需要删除派生类中的
lst
声明。

派生类中的
lst
与基类中使用的不同

您应该在
测试
基类中设置
lst
受保护
而不是
私有

然后,您可以在派生类中使用相同的变量。当然,您还需要删除派生类中的
lst
声明。

您没有使用
test
中的
list
。您正在声明一个新的
列表
,并在
派生的
的构造函数中使用它

另一方面,
size()


如果您想从
派生
内部添加到
测试
列表
中,您应该将
测试
列表
设置为受保护的
,而不是私有的。并且您应该从
派生
中删除具有重复名称的
列表
。您没有使用
测试
中的
列表
。您正在删除澄清一个新的
列表
,并在
派生
的构造函数中使用它

另一方面,
size()


如果您想从
派生
内部添加到
测试
列表
中,您应该将
测试
列表
设置为受保护的
,而不是私有的。您应该从
派生的
中删除具有重复名称的
列表

,您不能重载或对成员变量使用多变量。
获取_size
函数只知道
test
类,因此使用
test::lst
@Someprogrammerdude,因此您实际上必须将函数复制到派生类中?没有其他方法可以解决此问题?您可以使
test::lst
受保护
并删除
派生::lst
成员?您不能为成员变量加载或使用多变量。
get_size
函数只知道
test
类,因此使用
test::lst
@Someprogrammerdude,因此您实际上必须将函数复制到派生类中?没有其他方法可以解决此问题?您可以使
test::lst
受保护
并删除
派生::lst
成员?