Существует только одно реальное различие между class
и struct
в C ++.В class
видимость по умолчанию - private
, а в struct
видимость по умолчанию - public
.Как правило, программисты на C ++ используют их для выражения разных вещей.В большинстве случаев, если вы видите, как программист C ++ пишет что-то как struct
, это будет тупой объект, предназначенный для прямого доступа к его полям.Пример:
struct Point {
int x = 0;
int y = 0;
};
Point p;
p.x = 1;
p.y = 10;
Когда один и тот же программист пишет class
, он пытается инкапсулировать какое-то поведение.
class Point {
int x_ = 0;
int y_ = 0;
public:
Point(int x, int y) : x_(x), y_(y) {}
void Draw();
void Translate(int x, int y);
}
Point p{10, 5};
p.Translate(1, -3);
p.Draw();
Оба из вышеперечисленных могут быть реализованы при замене class
для struct
и обновления видимости.
В качестве случайной заметки в вашем примере ...
F(SomeType* x) { x->SomeThing(); }
- передача по указателю, а не по ссылке.
F(SomeType& x) { x.SomeThing(); }
- передача по ссылке (&
).
F(SomeType x) { x.SomeThing(); }
- передача по значению, которая обычно создает копию в письменном виде.
Когда вы вызываете первую с:
F(&x);
Вы вызываете оператор "address of".Фактически это передача адреса памяти x
.Функционально это очень похоже на ссылку, но не то же самое.