Does a static variable in a class's member fn always remain static?

Discussion in 'C++' started by Sam, Jan 13, 2004.

  1. Sam

    Sam Guest

    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?
     
    Sam, Jan 13, 2004
    #1
    1. Advertisements

  2. Sam

    John Carson Guest


    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, Jan 13, 2004
    #2
    1. Advertisements

  3. Sam

    Derek Guest

    Yes.
     
    Derek, Jan 13, 2004
    #3
  4. Sam

    Sumit Rajan Guest

    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.
     
    Sumit Rajan, Jan 13, 2004
    #4
  5. [Snipped]
    Absolutely yes (A simple test program would have given you the answer.)

    --The Directive
     
    The Directive, Jan 13, 2004
    #5
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.