【发布时间】:2014-11-05 03:08:58
【问题描述】:
boolean.cpp:
Boolean::Boolean() : test1(false),test2(false)
{
}
void Boolean::exec() {
test1 = true;
test2 = true;
if ((!test1) && (!test2))
std::cout << "both test1 && test2 are false" << std::endl;
else
std::cout << "test1 is " << test1 << " test2 is " << test2 << std::endl;
}
void Boolean::exec2() {
if ((!test1) && (!test2))
std::cout << "both test1 && test2 are false" << std::endl;
else
std::cout << "test1 is " << test1 << " test2 is " << test2 << std::endl;
}
boolean.h:
class Boolean {
private:
bool test1;
bool test2;
public:
Boolean();
void exec();
void exec2();
};
main.cpp:
int main(int argc, char *argv[]) {
Boolean start;
start.exec();
Boolean start2;
start2.exec2();
}
输出:
test1 is 1 test2 is 1
both test1 & test2 are false
如果我在开始时使用默认构造函数将 test1 和 test2 设置为 false。 如果我需要一个新的 Boolean 实例,在 Boolean::exec() 中设置的值会被覆盖。
bool test1 = false;类中不允许声明。 如果没有默认构造函数,则布尔值不会被初始化。
那么声明 bool 'false' 并在设置时保持 'true' 的最佳解决方案是什么?
【问题讨论】:
-
老实说,我承认这个问题对我没有任何意义。是否只想使用
Boolean的单个实例? -
我不太明白你想要达到什么目的;您可以引入一个以两个
bool作为参数的构造函数,以便您可以在创建时指定它们。exec1更改相应实例的状态,exec2不会。请提供有关所需行为的更多背景信息。 -
Boolean 的第二个实例只是为了再次调用默认构造函数。在一个常见的项目中,我会在另一个 .cpp 文件中使用另一个 Boolean 实例,例如我想要实现的是:在开始时将 bool 设置为 false,如果在 .txt 文件中找到一个字符串,将 bool 设置为 true,另一个类的方法检查 true 或 false 并进行适当的计算
-
@12dollar 仍然没有意义。暂时忘记此代码。描述你试图解决的问题,然后描述你是如何希望这个代码可以解决这个问题的,可悲的是失败了。如果您期望
Boolean的第二个实例化以某种方式改变一个不相关的实例,那么如果没有静态成员就不会发生这种情况(老实说这毫无意义)。 -
@12dollar 如果
exec2()在Boolean的同一实例上调用,则为true。每个实例(对象)都有自己的非静态成员副本。您是否尝试在对象之间共享数据?如果是这样,为什么?可以详细说一下吗?