我有
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。
答案 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)
嗯,真正的问题是天气类是相同的,有相同的结构,有一些相同的部分,或者其中一个是另一种。
答案 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();
}