Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scope of variables in if statements

I have a class that has no default constructor or assignment operator so it is declared and initialized within an if/else statement depending on the result of another function. But then it says that it is out of scope later even though both routes of the conditional will create an instance.

Consider the following example (done with int just to illustrate the point):

#include <iostream>  int main()  {   if(1) {     int i = 5;   } else {     int i = 0;   }    std::cout << i << std::endl;   return 0; } 

Do variables declared in a conditional go out of scope at the end of the conditional? What is the correct way to handle the situation where there is no default constructor but the arguments for the constructor depend on certain conditionals?

Edit

In light of the answers given, the situation is more complex so maybe the approach would have to change. There is an abstract base class A and two classes B and C that derive from A. How would something like this:

if(condition) {    B obj(args); } else {    C obj(args); } 

change the approach? Since A is abstract, I couldn't just declare A* obj and create the appropriate type with new.

like image 395
tpg2114 Avatar asked Dec 17 '11 06:12

tpg2114


People also ask

What is the scope of an if statement?

if is a conditional statement, which returns true or false based on the condition that is passed in it's expression. By default, if-statement is implemented on only one line, that follows it. But if we put block after the if-statement, it will be implemented on the whole block.

Can we use variables in IF statement?

If you're new to the syntax that's used in the code sample, if (int i = 5) { is a perfectly valid way of declaring and defining a variable, then using it inside the given if statement. It allows us to write terser, clearer code, while also avoiding limiting the scope of a variable.

DO IF statements have scope Python?

Yes. It is also true for for scope.

What are the scopes of variables?

A scope is a region of the program and broadly speaking there are three places, where variables can be declared: Inside a function or a block which is called local variables, In the definition of function parameters which is called formal parameters.


1 Answers

"Do variables declared in a conditional go out of scope at the end of the conditional?"

Yes - the scope of a local variable only falls within enclosing brackets:

{    int x; //scope begins     //... }//scope ends //x is not available here 

In your case, say you have class A.

If you're not dealing with pointers:

A a( condition ? 1 : 2 ); 

or if you're using a different constructor prototype:

A a = condition ? A(1) : A(2,3); 

If you're creating the instance on the heap:

A* instance = NULL; if ( condition ) {    instance = new A(1); } else {    instance = new A(2); } 

or you could use the ternary operator:

//if condition is true, call A(1), otherwise A(2) A* instance = new A( condition ? 1 : 2 ); 

EDIT:

Yes you could:

A* x = NULL; //pointer to abstract class - it works if ( condition )    x = new B(); else    x = new C(); 

EDIT:

It seems what you're looking for is the factory pattern (look it up):

 class A; //abstract  class B : public A;  class C : public A;   class AFactory  {  public:     A* create(int x)     {        if ( x == 0 )           return new B;        if ( x == 1 )           return new C;        return NULL;     }  }; 
like image 155
Luchian Grigore Avatar answered Sep 28 '22 16:09

Luchian Grigore