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

C++ Copy values of one object into another object

本文关键字:一个对象 复制 C++      更新时间:2023-10-16

我有

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

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

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

如果我从obj1中获取每个布尔变量的值并将其传递给obj2......这将使代码非常巨大。

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

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

class b = class a;

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

您可以在此处阅读有关复制构造函数和运算符 = 的信息:http://www.learncpp.com/cpp-tutorial/911-the-copy-constructor-and-overloading-the-assignment-operator/

请注意,如果您选择 = 运算符路由,请务必阅读文章,因为它需要一些时间来适应。

传递一个 std::vector 作为参数,保存从 1 到 n 的布尔值。为什么即使你有这么多的单变量而不是一个向量?

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

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

将布尔值传递给 A,以便获得以下代码:

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

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

  • 同一类:仅使用 1 个类并根据需要创建尽可能多的实例
  • 相同的结构
  • :如果它们具有相同的结构但不同的方法,您可以创建父类或保持原样,CUS 的相同结构不一定表示相同的含义。
  • 是相同的,或者其中之一是另一种:这可能说继承。 您需要根据逻辑决定哪些部分应该进入父类,并且父类应该是抽象的,或者 i B 的父类,反之亦然,或者两者都是一个新的父类

您可以复制构造函数(以及转换构造函数)和运算符=,如另一个答案中所述,并将所有布尔值放在数组中,如另一个答案中所述。如果需要或希望布尔值具有离散变量名称,则可以将它们放在结构中并使用该结构传递值。此代码只是使用 Get() 和 Set() 传递结构: 如果你做一个复制构造函数和运算符=,结构不是必需的,因为大型赋值代码隐藏在成员函数中,并且在从一个对象传递到另一个对象时看不到。但是,如果不同类型的对象始终包含相同的布尔值集,并且布尔值都以某种方式相关,则最好保留它。

#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();
}
相关文章: