public, protected, private - определяют область доступности полей и методов класса
class A
{
public:
int x;
protected:
int y;
private:
int z;
};
void foo()
{
A bar;
int x = bar.x; // можно получить
int y = bar.y; // нельзя получить
int z = bar.z; // нельзя получить
}
class B : public A
{
// x становится public
// y становится protected
// z становится не доступным из B
};
class C : protected A
{
// x становится protected
// y становится protected
// z становится не доступным из C
};
class D : private A
{
// x становится private
// y становится private
// z становится не доступным из D
};
class E : private A
{
// x не доступен из E
// y не доступен из E
// z не доступен из E
};
static в зависимости от места использования или делает поле общим для всех объектов, или организовывает возможность существования переменной когда она выходит из поле видимости или интересные вещи с функциями
