В модульном программировании на C ++, как вы собираете файлы .cpp и .h?

В настоящее время я работаю над большим проектом для школы, который разделен на 6 этапов. На первом этапе мне дают код для добавления в мои файлы, но я не знаю, как их сортировать. Каково общее соглашение для распространения кода в модульном программировании?

Это то, что мне дали:

Веха 1: ДАТА КЛАСС

Чтобы запустить этот проект, клонируйте / загрузите веху 1 из репозитория курса и закодируйте недостающие части класса Date.

Класс Date инкапсулирует дату, которая может быть прочитана std::istream и распечатывается std::ostream используя следующий формат для чтения и записи: ГГГГ / ММ / ДД, где ГГГГ обозначает четырехзначное значение для года, ММ обозначает двузначное значение для месяца, а ДД обозначает двузначное значение для день в месяце.

Завершить реализацию Date класс с использованием следующих спецификаций:

Предопределенные константы:

Предварительно определите ограничения по годам, которые будут считаться приемлемыми:

const int min_year = 2000
const int max_year = 2030

Частные участники:

Данные:

Год — четырехзначное целое число от min_year до max_year.

Месяц года — значение от 1 до 12 включительно

День месяца — значение от 1 до количества дней в месяце (см.

mday(int,int) функция-член описана ниже) — Обратите внимание, что в феврале 29
дни в високосном году.

Значение компаратора, которое будет использоваться для сравнения даты, хранящейся в текущем объекте, с датой, хранящейся в другом объекте Date. Ваши конструкторы устанавливают это значение, а ваши публичные операторы используют его для сравнения двух дат. (Если значение даты один больше, чем значение даты два, то дата один является более поздней, чем дата два; то есть дата один — после даты два).

Состояние ошибки, на которое клиент может ссылаться, чтобы определить, содержит ли объект допустимую дату, а если нет, то какая часть даты содержит ошибку. Возможные состояния ошибки — целочисленные значения, определенные как макросы в заголовке класса Date:

NO_ERROR 0 — Нет ошибок — дата действительна

CIN_FAILED 1 — istream не удалось ввести информацию

YEAR_ERROR 2 — неверное значение года

MON_ERROR 3 — Недопустимое значение месяца

DAY_ERROR 4 — Неверное значение дня

Функции-члены:

int mdays(int month, int year) const; (этот запрос уже
реализовано и обеспечено). Этот запрос возвращает количество дней в month из year,

void errCode(int errorCode);
Эта функция устанавливает переменную состояния ошибки в одно из значений, перечисленных выше.

Публичные участники:

Конструкторы:

Конструктор без аргументов (по умолчанию): инициализирует объект в безопасное пустое состояние и устанавливает состояние ошибки в NO_ERROR, Используйте 0000/00/00 в качестве даты для безопасного пустого состояния и установите значение компаратора равным 0.

Три аргумента конструктора: принимает в своих параметрах целочисленные значения для года, месяца и дня. Этот конструктор проверяет, находится ли каждое число в диапазоне, в порядке года, месяца и дня. Если любое из чисел не находится в пределах диапазона, эта функция устанавливает состояние ошибки в соответствующий код ошибки и останавливает дальнейшую проверку.

(Используйте функцию-член mday (int, int), чтобы получить количество дней в полученном месяце для полученного года. Значение месяца может быть от 1 до 12 включительно). Если все полученные данные верны, этот конструктор сохраняет значения, полученные в текущем объекте, вычисляет значение компаратора и устанавливает состояние ошибки NO_ERROR. Если какие-либо из полученных данных недействительны, это
Конструктор инициализирует объект в безопасное пустое состояние, устанавливает значение компаратора в 0 и устанавливает состояние ошибки в NO_ERROR.

Используйте следующую формулу, чтобы установить значение компаратора для действительной даты:
= год * 372 + месяц * 13 + день

операторы

bool operator==(const Date& rhs) const;

bool operator!=(const Date& rhs) const;

bool operator<(const Date& rhs) const;

bool operator>(const Date& rhs) const;

bool operator<=(const Date& rhs) const;

bool operator>=(const Date& rhs) const;

Эти операторы сравнения возвращают результат сравнения текущего объекта как левого операнда с другим объектом Date как правого операнда, если два объекта не пусты. Если один или оба из них пусты, эти операторы возвращают false.

Например, оператор< возвращает true, если Дата, сохраненная в текущем объекте, предшествует дате, сохраненной в rhs; в противном случае этот оператор возвращает false.

Запросы и модификатор

int errCode() const;
Этот запрос возвращает состояние ошибки в виде значения кода ошибки.

bool bad() const;
Этот запрос возвращает true, если состояние ошибки не NO_ERROR.

std::istream& read(std::istream& istr);
Эта функция считывает дату с консоли в следующем формате: ГГГГ? ММ? ДД (например, 2016/03/24 или 2016-03-24). Эта функция не запрашивает пользователя. Если istr не удается в любой точке, эта функция устанавливает состояние ошибки в CIN_FAILED и НЕ очищает istr. Если istr не удалось, вызов istr.fail () возвращает true. Если ваша функция read () считывает числа успешно, независимо от результата этого процесса ввода, эта функция возвращает ссылку на объект std :: istream.

std::ostream& write(std::ostream& ostr) const;
Этот запрос записывает дату в объект std :: ostream в следующем формате: YYYY / MM / DD, а затем возвращает ссылку на объект std :: ostream.
Вспомогательные функции: оператор<< Этот оператор работает с объектом std :: ostream для вывода даты на консоль. operator >> Этот оператор работает с объектом std :: istream для чтения даты из консоли. Используйте функции чтения и записи в этих операторах; НЕ используйте друзей для этих перегрузок оператора. Включите прототипы для этих двух операторов в заголовочный файл. Поместите их прототипы после определения класса.

1

Решение

Я не уверен, к чему ты стремишься. Но обычная практика — делить ваши проекты на подпроектные каталоги. А затем отделить header(.h, .hpp etc) а также source(.c, .cpp, .cxx etc) файлы. Возьмите разделение, мотивируя с Принцип единой ответственности

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]