C ++将一个对象的值复制到另一个对象中

时间:2014-11-20 15:00:53

标签: c++ class copy

我有

Class A
{
    A(bool t1, bool t2, bool t3......................bool tn );
}

Class B
{
    B(bool t1, bool t2, bool t3.......................bool tn);
}

两个类都有相同的结构,我想从A类obj1中提取所有bool值并将其传递给B类obj2

如果我从obj1获取每个bool变量的值并将其传递给obj2 ...它将使代码非常庞大。

我使用reinterpret_cast来解决这个问题但是我得到了c ++ lint警告826 http://stellar.cleanscape.net/products/cpp/checks.html

4 个答案:

答案 0 :(得分:2)

将std :: vector作为参数传递,保持bool值从1到n。为什么即使你有这么多单变量而不是矢量?

B(bool t1, bool t2, bool t3.......................bool tn);

B(std::vector<bool>& booleanValues);

将booleanValues传递给A,以便获得此代码:

B(std::vector<bool>& booleanValues)
{
     A(booleanValues);
}

答案 1 :(得分:2)

您可以为类b创建一个构造函数,它将类a作为参数,在构造函数中进行赋值。 或者你可以重载=运算符。最终你可以这样做:

class b = class a;

如果你采用重载=运算符的路线。

您可以阅读有关复制构造函数和operator = here:http://www.learncpp.com/cpp-tutorial/911-the-copy-constructor-and-overloading-the-assignment-operator/

的信息

请注意,如果您选择=运营商路线,请务必阅读该文章,因为这需要一些时间来适应。

答案 2 :(得分:1)

嗯,真正的问题是天气类是相同的,有相同的结构,有一些相同的部分,或者其中一个是另一种。

  • 同一个类:只使用一个类并根据需要创建尽可能多的实例
  • 相同的结构:如果他们有相同的结构但不同的方法你可以创建一个父类或保持它们原样,cus&#39;同样的结构并不一定说同样的意思。
  • 是相同的或者是其中一种是另一种:这可能是继承。你需要根据逻辑决定哪些部分应该转到父类,并且父类的天气应该是抽象的,或者我是B的父类,反过来或两者的新父类

答案 3 :(得分:1)

您可以复制构造函数(以及转换构造函数)和operator =,如另一个答案中所述,并将所有bool放在一个数组中,如另一个答案中所述。如果您需要或希望bool具有离散变量名,您可以将它们放在结构中并使用该结构来传递值。这段代码只是通过Get()和Set()传递结构:如果你做了一个复制构造函数和operator =结构是没有必要的,因为大的赋值代码隐藏在成员函数中,当从对象传递到宾语。但如果不同类型的对象总是包含同一组bool并且bool都以某种方式相关,那么最好保留它。

#include <iostream>
using namespace std;

struct States {
  bool left;
  bool right;
  bool up;
  bool down;
};

class A {
  States states;
public: 
  A (bool left, bool right, bool up, bool down) : states {left,right,up,down} {}
  void Print(void) { 
    cout << states.left << ',' << states.right << ',' << states.up << ',' << states.down << endl;
  }
  void Set(const States &states) { this->states = states; }
  const States &Get(void) { return states; }
};

class B {
  States states;
public:
  B (bool left, bool right, bool up, bool down) : states {left,right,up,down} {}
  void Set(const States &states) { this->states = states; }
  const States &Get(void) { return states; }
  void Print(void) { 
    cout << states.left << ',' << states.right << ',' << states.up << ',' << states.down << endl;
  }
};

int main()
{
  A a(true,false,true,false);
  a.Print();
  B b(true,true,true,true);
  b.Print();
  b.Set( a.Get() );
  b.Print();
  B bb(false,false,false,false);
  a.Set( bb.Get() );
  a.Print();
}