#8. Описание методов вне класса | Уроки ООП C++
HTML-код
- Опубликовано: 20 сен 2024
- Практический курс по ООП C++: stepik.org/a/2...
Телеграм-канал: t.me/java_and_c
Инфо-сайт: proproprogs.ru...
Объявление класса в заголовочном файле, а реализации его методов в отдельном файле модуля.
Да, действительно очень полезный урок! Понятно, полезно и просто бомбезно! Спасибо)
Очень полезный урок. Спасибо большое.
Спасибо. Понравился урок.
Здравствуйте, скажите а если в программе будет с десяток классов и для каждого будет написаны свои заголовочные файлы и файлы реализации, то надо будет перечислить все 10 файлов в строке для компилятора? А если в проекте сотни классов?
IDE это обычно делают на автомате, когда создается проект. Либо, можно make файл прописывать и через него компилировать и собирать большие проекты. Подробности можно спросить в ТГ-канале по C/C++ (ссылка под видео).
5:30
#include
class PointND {
unsigned total {0};
int *coords {nullptr};
public:
PointND() : total(0), coords(nullptr)
{ }
PointND(unsigned sz) : total(sz)
{
coords = new int[total] {0};
}
PointND(int* cr, unsigned len) : PointND(len)
{
set_coords(cr, len);
}
PointND(const PointND& other) : PointND(other.coords, other.total)
{ }
const PointND& operator=(const PointND& other);
unsigned get_total() { return total; }
const int* get_coords() { return coords; }
~PointND() { delete[] coords; }
private:
void set_coords(int* cr, unsigned len);
};
const PointND& PointND::operator=(const PointND& other)
{
delete[] coords;
total = other.total;
coords = new int[total];
set_coords(other.coords, total);
return *this;
}
void PointND::set_coords(int* cr, unsigned len)
{
for(unsigned i = 0; i < total; ++i)
coords[i] = (i < len) ? cr[i] : 0;
}
int main()
{
PointND pt(5);
return 0;
}
Спасибо за урок. Почему включение заголовочного файле в разные .cpp файлы не приведет к ошибке, если не-inline методы есть в .h файле? Ошибки нет, потому что тела одинаковые? Дубликат не будет удален оптимизирующим линкером?
классы образуют свою область видимости и существуют в пределах модуля (их определение), поэтому и получается дублирование
@@selfedu_rus дублирование это не ошибка неоднозначности?
@@citizenfour2951в данном случае нет, т.к. область видимости класса ограничивается текущим модулем
Ну и ну... Неужели кто-то описывает методы прямо в объявлении классов? Да никто так не делает.
простые прописывают (однооператорные)
@@selfedu_rus спасибо, кэп.