Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两个独立的类不';t共享相同的数据c++;_C++_Class_Oop - Fatal编程技术网

C++ 两个独立的类不';t共享相同的数据c++;

C++ 两个独立的类不';t共享相同的数据c++;,c++,class,oop,C++,Class,Oop,我有两个不同的类PipeNetwork.hppPipeNetwork.cpp和Tube.hppTube.cpp 哪一类管道:公共管网 PipeNetwork中的以下功能 void PipeNetwork::testing() { Tube u; u.length(); std::cout << "function works fine" << std::endl; } 最后在main int main()

我有两个不同的类
PipeNetwork.hpp
PipeNetwork.cpp
Tube.hpp
Tube.cpp

哪一类管道:公共管网

PipeNetwork中的以下功能

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

int main()
{
   PipeNetwork Oral;
   Oral.InputData("Input.txt");
   Oral.testing();
   return 0;
}
应该发生什么:

1-
InputData
获取一些数据并将其存储在
PipeNetwork
类中,包括
get\u tubes\u numbers()
完成得很好

2-
测试
应从
管道
类中的管网和预制件计算中获取
获取管道编号()

但是问题是
get\u tubes\u numbers()
总是返回空值0

根据我的理解,这是因为
objectu
是与
object-Oral
分开创建的,如图所示

管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;
    }
void PipeNetwork::testing()
{
u形管(*此);
u、 长度();

std::难道我不明白。你用
Tube u;
创建了一个新对象,你很惊讶它与你的
PipeNetwork
对象无关?你能用英语解释一下这个新的
Tube
对象应该如何与你的
PipeNetwork
交互,或者你的
测试方法的总体目标是什么吗?请用or来回答您的问题,这就是为什么我要发布我的问题,我认为
Tube u;
将是一个子类,这意味着共享来自基类
PipeNetwork
的相同变量。如果我是oop概念的新手,请纠正我的错误。我创建了
测试
来检查
长度
结果dingI是oop概念的新手——这个问题与oop无关。您创建了一个局部变量
u
,当该函数返回时,该局部变量就不多了。这与
u
int
double
或任何其他类型没有什么不同。您能分享类似的示例吗?我添加了一个示例
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;
    }