两个单独的类不共享相同的数据 C++

two separate classes doesn't share the same data c++

本文关键字:共享 数据 C++ 两个 单独      更新时间:2023-10-16

我有两个不同的类PipeNetwork.hppPipeNetwork.cppTube.hppTube.cpp

哪个class Tube : public PipeNetwork

管网中的以下函数

void PipeNetwork::testing()
{
Tube u;
u.length();
std::cout << "function works fine" << std::endl;
}

length()位于Tube

void Tube::length()
{
std::vector<double>::iterator i;
L.reserve(get_tubes_numbers());        // get_tubes numbers is function in PipeNetwork
//bla bla bla
}
int PipeNetwork::get_tubes_numbers()
{ 
return tubes_numbers;
}

最后是main

int main()
{
PipeNetwork Oral;
Oral.InputData("Input.txt");
Oral.testing();
return 0;
}

应该发生什么:

1-InputData获取一些数据并将其存储在PipeNetwork类中,包括get_tubes_numbers()

2-testing应从管网获得get_tubes_numbers(),并在Tube类中进行瓶坯计算

但问题是get_tubes_numbers()alwayes 返回空

值为 0根据我的理解,这是因为object u是与object Oral分开创建的,如图所示,对象在Visual Studio 01 02中的外观

但是Tube u;应该是一个子类,子类应该共享基类中的相同变量 还是我对子类的理解是错误的? 请纠正我。

如何解决这个问题?

谢谢你的时间

错误出在测试类中。创建一个使用默认构造函数初始化的新对象u。这会导致程序具有类标准初始化的所有成员。所以get_tubes_numbers()返回 0,因为tubes_numbers变量初始化为 0。

要解决此问题,您可以使用参数声明一个构造函数。在这种情况下,最好的选择是将基类作为参数传递PipeNetwork并在构造函数中初始化所需的字段。

这是可以实现的构造函数示例:

Tube::Tube(PipeNetwork& base)
{
this->tubes_numbers = base.tubes_numbers;
} 

然后你可以像这样修改代码:

void PipeNetwork::testing()
{
Tube u(*this);
u.length();
std::cout << "function works fine" << std::endl;
}