在C ++中如何在同一个类对象中共享公共元素。

时间:2016-07-06 14:14:00

标签: c++

我举了以下例子来说明我的问题:

class A
{
  public:
       int common;
       int a,b,c;
        A(int _common, int _a, int _b, int _c):common(_common),a(_a),b(_b),c(_c)
        {

         }
};
A obj1, obj2, obj3, obj4;

class B
 {
  public:
     void push_back(int common, int a, int b, int c)
     {
        A obj(common,a,b,c);
        aObjArray.push_back(obj);
      }
     std::vector<A> aObjArray_;

};


  B myObj;
  int common=3;
   myObj.push_back(common,1,2,4);
   myObj.push_back(common,4,26,54);
   myObj.push_back(common,7,52,64);

在此示例中,类B包含一个Class A对象的数组。创建对象由四个元素决定。期望A类中的common元素,每个生成的A对象的其他元素将不同。我能想到的一个解决方案是使common元素成为静态类成员,这样几个A类对象将共享相同的元素。

class A
{
public:
   static int common;
   A (int _a, int _b, int _c)
   {...}

}

class B
{ 
public
   int common;
    B()
    {
        A::common = common;

     }

}

还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标,因此一个具体的例子可能会为您提供更好的答案。

简化程序的一种简单方法是在类B中引入一个变量,该变量在构造common时定义A的值。具体来说,此值将在B::push_back中读取,并且调用者只需提供a,b,c

如果在编译中知道common的值,您可以考虑将类A设为template

template<int common>
class A {
public:
  void foo() {
    ...`common` available here...
  }
};

对于复杂或变异对象,您可以考虑使用共享指针。通常,可以(并且应该)避免这种复杂性。

答案 1 :(得分:1)

也许共享指针可以帮到你?

#include <vector>
#include <memory>
#include <iostream>

struct A {
   std::shared_ptr<int> common;
   int a, b, c;
   void use_common() {
      std::cout << *common << std::endl;
   }

};

int main() {
   std::vector<A> va;
   auto common = std::make_shared<int>(1);
   va.push_back({common, 1, 2, 3});
   va.push_back({common, 4, 5, 6});
   va.push_back({common, 7, 8, 9});
   va[0].use_common();
}