Ну а как же тогда пишут например подобную задачу: есть 1.h, 1.cpp, 2.h, 2.cpp, в первом содержится вектор типа стринг, во втором в этот вектор добавляются значения, удаляются, модифицируются, читаются?
Если у тебя в одной единице трансляции олни и те же поля были в классе public, а в другой - private, то стандарт не гарантирует бинарную совместимость.
Да. Компилятор имеет право по разному размещать поля в разных секциях public/protected/private. У тебя в разных единицах трансляции будут разные секции и в этом случае будет UB.