【问题标题】:Shared Ptr variable access, and object oriented programming for newbie共享 Ptr 变量访问和面向对象的新手编程
【发布时间】:2011-04-27 22:22:30
【问题描述】:

我需要一些建议,因为我是 C++ 新手

对于我的风力涡轮机分析程序,我将其划分为处理某些任务的各种对象。

一个对象处理文件输入/输出,在我遇到麻烦的情况下,我从文件中读取数据以获取数据,然后将这些数据填充到一个名为刀片的对象数组中,每个对象都包含压力和坐标等所有相关的数组到每个刀片。

另一个任务是后期处理,我希望这个后期处理对象能够操纵刀片数据。

所以,我的 main 实例化了一个 post-pro 对象,它启动输入/输出对象并告诉它将数据读入 Blade 对象数组。到目前为止一切顺利,现在我想将填充的刀片对象数组恢复到 post-pro 中,这样我就可以用它做一些事情了。

这引出了我的问题,但我会先问问题0:

0:这种处理对象的方式听起来正确吗?

以及实际的问题:

1:返回对象数组的指针似乎是要走的路,出于某种原因,我想到 shared_ptr 是要走的路。但我不知道查看变量数据的语法。下面是来自 post-pro 类的一些示例代码:

void PostProcessor::start() {
        VLMio io;//input/output object
        io.loadData(theFileName);//load file
        test = std::tr1::shared_ptr<Blade>(new Blade());//start up shared ptr called test
        test = io.testReturn();//attempt to receive blade obect array into that pointer, is this correct?
        cout<<test[0].x[0]<<endl//this line is trouble? is this how I would see the first x coord on the first blade? 
    //i.e is the syntax the same as for regular object pointers?
}

下面是加载数据的示例,它使用从文件中读取的数据填充一些 Blade 对象:

void IO::loadData() {
blades = new Blade[numberOfBlades];
blades[0].x[0] = 123;//just for example
blades[0].stress1 = 1234;//just for example
}

我还没有弄清楚如何返回这些刀片对象,但它可能看起来像这样:

std::tr1::shared_ptr<Blade> testReturn() {
//somehow attach a shared_ptr to the blades array pointer thing
//somehow return a shared ptr
}

综上所述,正确的做法是什么,智能指针对象的成员变量的语法是什么,希望大家理解,不好意思我是新手。

【问题讨论】:

  • io.testReturn() 是如何定义的?
  • testReturn 还没有完全解决,因为我不确定,但我已经添加了上面会发生什么的示例
  • 这看起来像是 std::vector 的黄金时间 :)

标签: c++ oop


【解决方案1】:

如果您想使用直接向上的数组(如在 C 中),您需要创建一个刀片数组,而您的代码只创建一个。您还需要查看此问题:TR1 Shared Arrays

但与其搞砸所有这些,不如只返回一个std::vector&lt;Blade&gt; 或者如果它有一个固定的大小,也可以返回一个std::tr1::array&lt;Blade, N&gt;

【讨论】:

  • 是的,请参阅更新,我现在认为我已经为指针创建了一个刀片数组。我无法返回向量,因为每个刀片对象都包含数组和其他数据成员,例如其他对象,它们的大小可变
  • @CptL 是的,你可以。并且给定类的 C++ 对象总是具有相同的大小。
  • 那么我是否可以以某种方式将我的对象放入向量中?
  • @CptL 没有“以某种方式”涉及 - 您可以将任何类型的 C++ 类存储在 std::vector 中。
  • @unapersson ,这听起来很有希望,我会研究一下
【解决方案2】:

这一行:

    test = std::tr1::shared_ptr<Blade>(new Blade());//start up shared ptr called test

没有分配数组,因为您似乎认为它正在分配单个 Blade 实例。数组看起来像:

    new Blade[somesize]

但是您不能使用shared_ptr 来存储返回值。正如其他人所建议的那样,vector&lt;Blade&gt; 可能就是您想要的。

【讨论】:

  • 查看更新,我想我现在可以返回多个刀片对象。我无法返回向量,因为每个刀片对象都包含数组和其他数据成员,例如其他对象,它们的大小可变
  • @CptL 我认为您对 C++ 对象在内存中的布局方式基本缺乏了解 - 同一类的所有对象都具有相同的布局和相同的大小。
  • 是的,我确实对 C++ 的很多东西基本缺乏了解,但我确实知道我只是有点搞混了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 2014-04-05
  • 2021-08-12
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多