Es lohnt sich, an die Ursprünge von C++ und die Kompatibilität mit C zu erinnern.
C hat Strukturen, es hat kein Konzept der Verkapselung, also ist alles öffentlich.
Standardmäßig öffentlich zu sein, wird im Allgemeinen als schlechte Idee angesehen, wenn man einen objektorientierten Ansatz verfolgt. Wenn man also eine Form von C entwickelt, die von Natur aus förderlich für OOP ist (man kann OO in C machen, aber es wird einem nicht helfen), was die Idee von C++ (ursprünglich "C With Classes") war, ist es sinnvoll, Mitglieder standardmäßig privat zu machen.
Andererseits, wenn Stroustrup die Semantik von struct
so dass seine Mitglieder standardmäßig privat waren, wäre die Kompatibilität nicht mehr gegeben gewesen (das ist heute nicht mehr so oft der Fall, da sich die Standards auseinanderentwickelt haben, aber alle gültigen C-Programme waren auch gültige C++-Programme, was einen großen Einfluss darauf hatte, dass C++ Fuß fassen konnte).
Also ein neues Schlüsselwort, class
wurde eingeführt, um genau wie eine Struktur zu sein, aber standardmäßig privat.
Wenn C++ von Grund auf neu entstanden wäre, ohne Vorgeschichte, dann hätte es wahrscheinlich nur ein einziges solches Schlüsselwort. Wahrscheinlich hätte es auch nicht den Einfluss gehabt, den es hatte.
Im Allgemeinen neigen die Leute dazu, struct zu verwenden, wenn sie etwas tun, wie structs in C verwendet werden; öffentliche Mitglieder, kein Konstruktor (solange es nicht in einer Union ist, können Sie puede Konstruktoren in Structs haben, genau wie bei Klassen, aber die Leute neigen dazu, das nicht zu tun), keine virtuellen Methoden, etc. Da Sprachen ebenso dazu dienen, mit den Menschen zu kommunizieren, die den Code lesen, wie Maschinen zu instruieren (sonst würden wir bei Assembler und rohen VM-Opcodes bleiben), ist es eine gute Idee, dabei zu bleiben.