//: C10:StaticMemberFunctions.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include <iostream>
class X
{
int i;
static int j;
public:
X(int ii = 0) : i(ii)
{
/* Non-static member function can access */
/* static member function or data: */
j = i;}
int val() const { return i; }
/*Una funzione dichiarata come "static", puņ modificare solo variabili di tipo "static". Inoltre un'eventuale modifica apportata ad un attributo "static" interessa tutti gli oggetti di quella classe.*/
static int incr()
{
/*! i++; // Error: static member function */
/* cannot access non-static member data */
return ++j;}
static int f()
{
/*! val(); // Error: static member function */
/* cannot access non-static member function */
return incr(); /* OK -- calls static */}
};
int X::j = 0;
int main()
{
X x, x2;
X* xp = &x;
cout << "x.f() : " << x.f() << endl;
cout << "xp->f() : " << xp->f() << endl;
cout << "X::f() : " << X::f() << endl;
/* Only works with static members */
cout << "x2.f() : " << x2.f() << endl;
cout << "x.f() : " << x.f() << endl;} ///:~