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
成员?