Does a static variable in a class's member fn always remain static? 
July 22nd, 2005, 05:11 AM
| | | Does a static variable in a class's member fn always remain static?
I'm thinking about this question. I've a class A and its member
function fn. In fn there's a static variable s.
If I create an object by
A a;
When I call the function a.fn, s would remain static throught out all
the callings of a.fn, in other words it would be affected by all the
callings of a.fn.
Now the question is, if I've created other objects by
A b,c,d;
When I call the function b.fn, c.fn, d.fn, will they also affect the
value of the static s? | 
July 22nd, 2005, 05:11 AM
| | | Re: Does a static variable in a class's member fn always remain static?
"Sam" wrote:[color=blue]
> I'm thinking about this question. I've a class A and its
> member function fn. In fn there's a static variable s.
>
> If I create an object by A a;
>
> When I call the function a.fn, s would remain static
> throught out all the callings of a.fn, in other words it
> would be affected by all the callings of a.fn.
>
> Now the question is, if I've created other objects by A
> b,c,d;
>
> When I call the function b.fn, c.fn, d.fn, will they also
> affect the value of the static s?[/color]
Yes. | 
July 22nd, 2005, 05:11 AM
| | | Re: Does a static variable in a class's member fn always remain static?
"Sam" <hchen@nd.edu> wrote in message
news:f0edac8.0401130651.618ba34@posting.google.com ...[color=blue]
> I'm thinking about this question. I've a class A and its member
> function fn. In fn there's a static variable s.
>
> If I create an object by
> A a;
>
> When I call the function a.fn, s would remain static throught out all
> the callings of a.fn, in other words it would be affected by all the
> callings of a.fn.
>
> Now the question is, if I've created other objects by
> A b,c,d;
>
> When I call the function b.fn, c.fn, d.fn, will they also affect the
> value of the static s?[/color]
Why don't you try it out?
#include <iostream>
class X {
int i;
public:
X(){i=0;};
int fn();
};
int X::fn()
{
static int s = 0;
return ++s;
}
int main()
{
X a;
std::cout << a.fn() << '\n';
X b;
std::cout << b.fn() << '\n';
std::cout << a.fn() << '\n';
}
Does that answer your question?
The static variable, s, retains its value between calls.
Sumit. | 
July 22nd, 2005, 05:11 AM
| | | Re: Does a static variable in a class's member fn always remain static?
"Sam" <hchen@nd.edu> wrote in message
news:f0edac8.0401130651.618ba34@posting.google.com[color=blue]
> I'm thinking about this question. I've a class A and its member
> function fn. In fn there's a static variable s.
>
> If I create an object by
> A a;
>
> When I call the function a.fn, s would remain static throught out all
> the callings of a.fn, in other words it would be affected by all the
> callings of a.fn.
>
> Now the question is, if I've created other objects by
> A b,c,d;
>
> When I call the function b.fn, c.fn, d.fn, will they also affect the
> value of the static s?[/color]
Why don't you try it and see?
The answer is yes. Individual objects have their own copies of a class's
data members, but there is only one copy of each member function and it is
shared by all objects of the class. Thus a.fn(), b.fn(), c.fn(), d.fn() etc.
are all calling the same function containing the same static variable.
--
John Carson
1. To reply to email address, remove donald
2. Don't reply to email address (post here instead) | 
July 22nd, 2005, 05:12 AM
| | | Re: Does a static variable in a class's member fn always remain static?
[Snipped]
[color=blue]
>
> When I call the function b.fn, c.fn, d.fn, will they also affect the
> value of the static s?[/color]
Absolutely yes (A simple test program would have given you the answer.)
--The Directive | | Thread Tools | Search this Thread | | | |
Posting Rules
| You may not post new threads You may not post replies You may not post attachments You may not edit your posts HTML code is Off | | | | | | What is Bytes?
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 220,989 network members.
|