如何根据条件来声明一个对象 并在条件语句外继续使用
比如如下代码
Class A
{
public:
run();
};
main()
{
bool b=1;
if(b=1)
{A a;}
.........
.........
if(b=1)
{a.run();}
}
我根据b的值决定是否创建类A的对象a,并在执行了一些其他函数之后,再次根据b的值决定是否执行函数run(),但是对象a是个局部变量,第二次是无法使用它的
我的问题是有什么方法可否让a的作用域扩大到整个main函数
或者有什么其他的方法能达到我的预期效果,就是根据某个条件来创建对象,并在条件结构外继续使用这个对象
[解决办法]
用全局变量或者是专门定义一个对象管理器。
[解决办法]
指针就行。
main()
{
bool b=1;
A* pa = 0;
if(b=1)
{pa = new A;}
.........
.........
if(b=1 && pa)
{pa->run();}
delete pa;
}
其实最好是把 b==1 的逻辑合为一处,都放在一个块儿里面。程序干净利落,逻辑也清晰。
[解决办法]
if(b=1)
Is an an assign operation, it always return true. You meant to do:
if(b==1)
[解决办法]
扩大 范围就可以了
全局变量 或者堆栈!
[解决办法]
如果lz是不想因为A的空间问题这么做的话,可以定义一个A的指针比如A*p初始化为NULL,如果进入条件后,可以动态new一个,然后让这个指针指向开辟的地址 p =new A,下边可以直接判断这个指针是否为非NULL来确定是否执行p->run();
[解决办法]
{A a;}
在这个块结束后 a的生命周期结束
A *a;
if(b==1)
{ a = new A;}
[解决办法]
Class?A
{
public:
??run();
};
main()
{
??bool?b=1;
??
A* a = NULL;?
??if(b=1)
??{a = new A();}
?
??.........
??.........
?
??if(b=1)
??{a.run();}
}
这样就OK拉
[解决办法]
Class A
{
public:
run();
};
main()
{
bool b=1;
A* a = NULL;
if(b=1)
{a = new A();}
.........
.........
if(b=1)
{a->run();}
delete a;
a = NULL
}
上面一个忘记释放了。我的错
[解决办法]
用编译宏
#define USING_A
#ifdef USING_A
Class A
{
public:
run();
};
#endif // #ifdef USING_A
main()
{
#ifdef USING_A
A a;
#endif
.........
#ifdef USING_A
a.run();
#endif
}
[解决办法]
用容器
main()
{
bool b=1;
map<int, A*> mapa;
if(b=1)
{
A *pa = new A();
mapa.insert(1, pa);
}
.........
.........
if(b=1)
{
A *pa = mapa.find(1);
if(pa) pa->run();
}
}