让一个私人成员从一个班级到另一个班级

时间:2013-11-06 21:11:05

标签: c++

所以,我有一个算法,需要几个传感器,将它们缩放到一个温度,并将临时值放在一个全局数据存储中。但是,传感器类A执行B类所需的更多计算。我不能把新的calcs放在数据存储中,我不想在B类中包含A类只是为了用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 个答案:

答案 0 :(得分:2)

好吧,如果你不愿意写访问者,你可以使用friend

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

有些人认为这打破了封装,并且吸气剂将是首选方法。

答案 1 :(得分: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];
    }
}

答案 2 :(得分: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());
}

答案 3 :(得分: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.
}