Home »
C++ programming »
C++ find output programs
C++ Static Variables and Functions | Find output programs | Set 2
This section contains the C++ find output programs with their explanations on C++ Static Variables and Functions (set 2).
Submitted by Nidhi, on June 25, 2020
Program 1:
#include <iostream>
using namespace std;
int* fun()
{
static int a;
a++;
return &a;
}
int main()
{
int** p;
p = &(fun());
fun();
fun();
fun();
cout << "function called " << **p << " times";
return 0;
}
Output:
main.cpp: In function ‘int main()’:
main.cpp:16:16: error: lvalue required as unary ‘&’ operand
p = &(fun());
^
Explanation:
This code will generate an error because of the below statement,
p = &(fun());
In the above statement p is a chain pointer, but we are trying to get the address of address that does not exist.
Program 2:
#include <iostream>
using namespace std;
int* fun()
{
static int a;
a++;
return &a;
}
static int a = 10;
int main()
{
int* p;
p = fun();
fun();
fun();
fun();
cout << "function called " << *p << " times";
return 0;
}
Output:
function called 4 times
Explanation:
Here, we created a function that contains a static variable a and function returns an integer pointer.
And one more global static variable a is created and initialize with 10, here global and local both a are different variables.
Now, coming to the main() function, here we created an integer pointer p that is storing the address returned by function fun(), after every function call, the static variable gets increased, because the default value of the static variable is 0 and then its lifetime is in the whole program.
So, finally it will print "function called 4 times" on the console screen. After calling function fun() 4 times.
Program 3:
#include <iostream>
using namespace std;
class Sample {
static int A;
public:
Sample()
{
A++;
}
void display()
{
cout << A << endl;
}
};
int main()
{
Sample S;
S.display();
return 0;
}
Output:
/tmp/ccjOw4Qx.o: In function `Sample::Sample()':
main.cpp:(.text._ZN6SampleC2Ev[_ZN6SampleC5Ev]+0xa): undefined reference to `Sample::A'
main.cpp:(.text._ZN6SampleC2Ev[_ZN6SampleC5Ev]+0x13): undefined reference to `Sample::A'
/tmp/ccjOw4Qx.o: In function `Sample::display()':
main.cpp:(.text._ZN6Sample7displayEv[_ZN6Sample7displayEv]+0xe): undefined reference to `Sample::A'
collect2: error: ld returned 1 exit status
Explanation:
This code will generate a syntax error (Undefined reference to 'Sample::A') because we declared a static variable, but we did not define it properly.
The below program will demonstrate how to define static members of the class?
#include <iostream>
using namespace std;
class Sample {
static int A;
public:
Sample()
{
A++;
}
void display()
{
cout << A << endl;
}
};
int Sample::A = 0;
int main()
{
Sample S;
S.display();
return 0;
}
Output:
1