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