0

所以,我有一个算法,它需要几个传感器,将它们缩放到一个温度,然后把这些温度放在一个全局数据存储中。但是,A 类传感器执行 B 类所需的更多计算。我不能将新的计算放在数据存储中,并且我不想将 A 类包含在 B 类中,只是为了用 getter 获取一条数据。

Class A
{
private:
    float x[4];
    float y[4];
public:
//Scaling functions, etc...
}

Class B
{
private:
    float c[4];
public:
    //Scaling functions etc...
}

将 x[4] 传递给 B 类以放入 c[4] 的最佳方法是什么?真正的课程还有更多的内容,这是我想我能做的最简单的事情。x[4] 有需要在 B 类中使用的数据。

4

4 回答 4

2

好吧,friend如果您不愿意编写访问器,您可以使用 s:

http://en.wikipedia.org/wiki/Friend_class

有人会争辩说这会破坏封装,而 getter 将是首选方法。

于 2013-11-06T21:13:12.677 回答
2
class A
{
private:
    float x[4];
    float y[4];
public:
    float* getXs()
    {
       return x;
    }
}

class B
{
private:
    float c[4];
public:
    //Scaling functions etc...
    void setXs(float *x)
    {
        for (int i=0;i<4;i++)
           c[i] = x[i];
    }
}
于 2013-11-06T21:14:35.080 回答
1

方法有很多种。最好的取决于您的标准。

如果时间对您来说并不重要,我会很简单并使用复制构造函数:

Class A
{
private:
    float x[4];
    float y[4];
public:
    const float& X(int i) { return x[i]; }
}

Class B
{
private:
    float c[4];
public:
    B( const A& a ) {
      for( k = 0; k < 4; k++ )
        c[k] = a.X(k);
    }
}

如果时间很关键,您可以考虑使用指针复制。但要非常准确:

Class A
{
private:
    friend B;
    float x[4];
    float y[4];
public:
    ...
}

Class B
{
private:
    const float* const c;
public:
    B( const A& a ):c(a.x){}
    // use c like c[4], but don't change it.
}
于 2013-11-06T21:22:16.633 回答
1

调用 B 的构造函数时,在 A 的实例上使用 x[4] 的 getter。

#include <string.h>

class A
{
      private:
           float x[4];
           float y[4];
      public:
           float const *xArray() const
           {
               return x;
           }
};

class B
{
      private:
           float c[4];
      public:
           void setCArray(float const arr[4])
           {
               memcpy(c, arr, 4 * sizeof(int));
           }
};

int main()
{
    A a;
    B b;

    b.setCArray(a.xArray());
}
于 2013-11-06T21:14:38.880 回答