1.
class Cat { public: Cat(int age) : itsAge(age) { numOfCats++; } virtual ~Cat() { numOfCats--; } virtual int getAge() { return itsAge; } virtual void setAge(int age) { itsAge = age; } static int getNumOfCats() { return numOfCats; } private: int itsAge; static int numOfCats; }; int Cat::numOfCats = 0; void telepathicFunction(); int main() { const int maxCats = 5; Cat *catHouse[maxCats]; int i; for (i = 0; i < maxCats; i++) { catHouse[i] = new Cat(i); telepathicFunction(); } for (i = 0; i < maxCats; i++) { delete catHouse[i]; telepathicFunction(); } return 0; } void telepathicFunction() { cout << "There are " << Cat::getNumOfCats() << " cats alive!\n"; }
2.
#include "my_x_y_z.h" int main() { X x; Z z; z.f(&x); return 0; }
#ifndef MY_X_Y_Z_H class X; class Y { public: void g(X*); }; class X { private: int i; public: X(){i=0;} friend void h(X*); friend void Y::g(X*); friend class Z; }; void h(X* x) { x->i =+10; } void Y::g(X* x) { x->i ++; } class Z { public: void f(X* x) { x->i += 5; } }; #endif // MY_X_Y_Z_H