Все ли внутри класса?

У меня есть еще один рудиментарный вопрос. Я несколько напоминаю, что все в С++ входит в класс. Затем я слышу, что классы не должны использоваться там, где это возможно. Поэтому мой вопрос: когда вы делаете занятия, а когда нет? (пример или два были бы классными)

И случайный побочный вопрос: когда целесообразно поставить 2 класса в один заголовок? Или это имеет значение?

Ответ 1

В С++ все не нужно входить в класс (в отличие от Java, где все идет внутри класса).

  • Вы должны создать класс, если хотите представить какой-либо объект реального мира, например, человека, клиента, пользователя, животных, автомобиль и т.д. Вам необходимо хранить некоторые данные об объекте и иметь некоторые связанные с ними функции к объекту.

    Например: Клиент. Вы создаете класс клиента. Клиент должен хранить следующие данные. {Имя, возраст, адрес, телефон}. Вам нужны некоторые функции, такие как addCustomer(), sendMessage() и т.д.

  • Выбор того, где использовать классы и где не является серьезной проблемой дизайна. Нет общего правила. Перед тем, как начать свое приложение, вам нужно сесть с бумагой и карандашом и провести мозговой штурм основных классов, которые вам потребуются. Вы всегда можете добавлять и настраивать свой дизайн в будущем. При проектировании ваших классов самое важное, что нужно иметь в виду, - это повторное использование кода. Также постарайтесь, чтобы ваш код как можно более слабо связан.

  • Как стандартная практика, у вас должен быть один класс для файла заголовка.

Ответ 2

Все ли внутри класса?

Нет, наиболее определенно нет. Классы являются частью объектно-ориентированного программирования, но С++ - это не просто, в отличие, скажем, Java или С#.

С++ - это язык с несколькими парадигмами, что означает, что он также позволяет другие вещи. Это потому, что самый большой недостаток при использовании ООП - это повторное использование алгоритмов.
Конечно, вы можете просто написать определенные функции для каждого класса, но как здорово было бы просто написать его один раз и сделать с ним навсегда? Это то, на чем строится STL. Классы в STL, такие как vector, имеют только функции-члены, которые они абсолютно необходимы для инкапсуляции. Большинство из них уникальны в любом случае, например, как вы извлекаете первый элемент из vector, отличается от получения первого элемента list. Все это инкапсулируется и абстрагируется функциями-членами, такими как front и back (для прямого доступа к членам) или begin и end (для доступа итератора).

Теперь все остальные алгоритмические материалы являются бесплатной функцией, если она работает более чем на одном классе и не требует прямого доступа к внутренним элементам этого класса. Возьмем std::sort в качестве примера. Он работает на любой итератор-паре, если они являются итераторами произвольного доступа. В STL это будет vector и deque, а с С++ 0x мы получим array, но за пределами STL, ваши классы тоже, если они предоставляют такие итераторы. Или даже более заметные, массивы стиля C! Да, вы можете использовать их для сортировки, очень легко:

#include <algorithm>
#include <iostream>

int main(){
  int arr[5] = { 5, 2, 4, 1, 3 };
  std::sort(&arr[0], &arr[0] + 5);
  // arr == { 1, 2, 3, 4, 5 }
}

Запишите один раз, используйте всюду.

В качестве последнего пункта эта статья Скотта Мейерса - очень интересная статья о дизайне классов, а также о том, когда использовать свободные функции, а когда нет.

Ответ 3

В С++ не нужно инкапсулировать все в класс. С++ - это язык программирования с несколькими парадигмами, что означает, что вы можете либо использовать объектно-ориентированный подход, либо процедурный (без классов), либо сочетание между ними.

Как правило, инкапсуляция - это хорошо и может улучшить читаемость кода и удобство обслуживания.

Ответ 4

В целом, если что-то можно назвать объектом, это может быть класс. Класс должен соответствовать только одному "реальному" объекту. Не более одного объекта и обычно не является частью объекта.
Примеры: лицо, кисть, книга, библиотека, приложение, процесс, поток, подключение к Интернету, кнопка GUI, окно графического интерфейса.

Вариант двух классов в одном заголовке зависит от стандартов кодирования, с которыми вы работаете, или от тех, которые соблюдаются, почему для кого вы пишете код. У некоторых людей этого не было бы. Обычно это подходит, когда два класса довольно малы и очень связаны друг с другом, например, наследуются от одного и того же базового класса или интерфейса.

Пожалуйста, подумайте о том, чтобы прочитать правильную объектно-ориентированную и С++-книгу.

Ответ 5

Classes являются частью парадигмы программирования, называемой Объектно-ориентированная Программирование".

Person является class:

class Person {
public:
    int age;
}

Теперь мы создаем несколько "объектов":

Person Alice;
Person Bob;
Person Charlie;

Теперь смотрите:

Alice.age = 5;
std::cout << "Alice age: " << Alice.age << "\n";

Bob.age = 10 * Alice.age;
std::cout << "Bob age: " << Bob.age << "\n";

Вывод:

Alice age: 5
Bob age: 50

Как вы можете видеть, class es (или struct s) можно использовать для группировки вещей - это позволяет создавать "анологии".

Ответ 6

Класс - это в основном представление объекта. Класс будет содержать информацию об этом объекте и обычно методы для изменения этих данных.

Все, что не в классе в С++, известно как static код, означающий, что метод не требует контекста для вызова.

Методы в классах (методы в классах также могут быть статическими, но пусть забывают об этом) требуют, чтобы объект вызывал их.

Если у вас есть статический метод foo(int, int) и метод класса bar(int, int) в классе Example

boo вызывается следующим образом: foo(3, 4);

тогда как bar будет вызываться следующим образом:

Example obj;
obj.bar(3, 4);

Объектно-ориентированное программирование (с классами) имеет несколько преимуществ, и большинство часто используемых языков сегодня являются ООП.