Ответ
В C++ разница между class и struct минимальна и сводится к умолчанию уровня доступа и умолчанию наследования:
-
Уровень доступа по умолчанию:
- В
structвсе члены и методы по умолчаниюpublic. - В
classвсе члены и методы по умолчаниюprivate.
- В
-
Наследование по умолчанию:
- При наследовании
struct D : Base— наследование по умолчаниюpublic. - При наследовании
class D : Base— наследование по умолчаниюprivate.
- При наследовании
Пример, демонстрирующий разницу:
struct MyStruct { // public по умолчанию
int data; // public
void func() {} // public
};
class MyClass { // private по умолчанию
int data; // private
void func() {} // private
};
// Наследование
struct D1 : MyClass {}; // Наследование public MyClass (т.к. struct)
class D2 : MyClass {}; // Наследование private MyClass (т.к. class)
Практическое соглашение: struct традиционно используют для простых агрегатов данных (POD-типы, данные без сложной логики), а class — для полноценных объектов с инкапсуляцией и поведением. Однако с точки зрения языка их возможности (конструкторы, деструкторы, методы, наследование, полиморфизм) идентичны.
Ответ 18+ 🔞
Э, бля, ну слушай сюда, разберём эту древнюю, как говно мамонта, дилемму. class и struct в C++ — это, по сути, одно и то же, но с одним пиздецки важным нюансом, который всех и путает.
Если коротко, то разница — ёперный театр — всего в двух вещах: в том, что по умолчанию считается private, а что public. И всё, блядь.
-
Доступ по умолчанию, ёпта:
- В
structвсё, что ты туда напихаешь — поля, методы — по умолчаниюpublic. То есть, открыто всем, как жопа пьяного студента на вписке. - В
class— с точностью до наоборот. Всё по умолчаниюprivate. Спрятано, как золотой запас у жадного гнома. Хочешь что-то открыть — пишиpublic:.
- В
-
Наследование по умолчанию (вот тут уже интереснее):
- Когда твой
structнаследуется от чего-то (struct D : Base), то по умолчанию наследование будетpublic. Логично, да? Самpublic, и родителяpublic. - Когда
classнаследуется (class D : Base), то по умолчанию —privateнаследование. Опять же, в духе своей скрытности.
- Когда твой
Смотри, вот тебе наглядный пиздец:
struct MyStruct { // Всё public по умолчанию, расслабься
int data; // public — лежит, как на ладони
void func() {} // public — бери и пользуйся
};
class MyClass { // Всё private по умолчанию, хитрая жопа
int data; // private — спрятано, нихуя не видно
void func() {} // private — трогать низя
};
// А вот наследование, тут веселье
struct D1 : MyClass {}; // Наследует MyClass как public (потому что struct, логика!)
class D2 : MyClass {}; // Наследует MyClass как private (потому что class, опять своя логика!)
А теперь про негласное правило, которое все знают, но язык тебе не запрещает его нарушать:
struct исторически используют для тупых мешков с данными. Типа, точка на экране (x, y), вектор, какая-нибудь статистика — где всё открыто и никакой сложной хуйни.
class — это уже для серьёзных объектов, с сокрытием данных, кучей методов, чтобы там доверия ебать ноль к внешнему миру.
Но запомни раз и навсегда: с точки зрения возможностей — конструкторы, деструкторы, виртуальные функции, полиморфизм, шаблоны — между ними ни хуя себе разницы. Абсолютно никакой. Всё дело в этих двух дефолтных настройках, которые меняются одной строчкой. Вот и весь секрет, я тебе в рот чих-пых.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶