C++. struct like a class

Есть простые типы данных, есть и сложные, определяемые пользователем - пользовательский тип данных. В чистом C - это struct id {}, union id {} и enum id {}. В C++ - class id {}, причем понятие класса здесь настолько широкое, что оно включает в себя и struct id {}, и union id {}, и enum id {}. Поэтому структура может иметь свои методы, идентификаторы доступа (public:, private:, protected:), в общем мы имеем дело с объектной ориентацией. Например, такое в C не прокатит:

#include <iostream>
using namespace std;

struct first {
private:
   int a;
};

struct test {
   int n;
} tpl;

struct sec: first {
   int s;
   sec() {
     cout << "***" << endl;
     a = 16;
 }
 void f(int param = 0) {
    cout << "in sec struct function" << endl;
    p.s = param;
    cout << "s = " << p.s << endl;
    (p.s)++;
    cout << "s++ = " << p.s << endl;
 };
 void show() {
    cout << "a = " << a << endl;
 }
} p;

void testing() {
   cout << "in testing function" << endl;
}

test func(int n = 0) {
   tpl.n = n;
   return tpl;
}

int main() {
 testing();
 func();
 cout << "func(0). tpl.n = " << tpl.n << endl;
 func(16);
 cout << "func(16). tpl.n = " << tpl.n << endl;

 p.f(16);
 cout << "Outline. p->s = " << p.s << endl;
 p.show();

 return 0;
}


Стоит только отметить, по-умолчанию ( если явно не указывать ) тип доступа в struct id {}; - public:, а в class id {}; - private: