Evgenii Legotckoi
Evgenii Legotckoi08 липня 2017 р. 16:40

C++ - Навчальний посібник 007. Класи

Наявність даних, які у публічному доступі у структурі має свої переваги, надаючи повну свободу дій. Проте ми можемо хотіти приховати змінні, які використані в типі даних, щоб зробити поведінку типу більш передбачуваною та простіше модифікованою, а також, щоб її використання було більше схоже на використання фундаментального типу даних. Для цього необхідно визначити взаємодію інтерфейсу типу даних із доступом до недоступних змінних у класі.

У C++ такі типи даних називають класами. Клас має такий комплект складових, як змінні та методи для доступу до функціоналу класу.

В інтерфейсі класу можна визначити такі секції:

  • public - методи та змінні доступні для взаємодії ззовні класу;
  • protected - методи та змінні доступні для використання всередині класу, а також у класах, успадкованих від цього класу;
  • private - методи та змінні доступні для використання тільки всередині класу

Однак до private змінним можна отримати доступ ззовні за допомогою public методів.

У структурах також можна визначити private , protected та public секції. Відмінність структур від класів у разі полягає у цьому, що за умовчанням все учасники структур (змінні, методи) є public , тоді як і класі учасники перебувають у секції private.

Подивимося, як може виглядати клас Vector, який був оголошений як структура у попередній статті .

class Vector 
{
public:
    Vector(int s) 
        : elem {new double[s]}, 
          sz{s} 
    { }

    double& operator[](int i) { return elem[i]; }
    int size() { return sz; }

private:
    double∗ elem; // указатель на элементы
    int sz; // число элементов
};

Визначимо змінну класу Vector.

Vector v(6); // Вектор из шести элементов

Графічно Vector може бути представлений таким чином:

У принципі Vector є об'єктом, який визначає роботу з покажчиком на масив елементів та його величину. Різні об'єкти Vector можуть мати різну кількість елементів та їх величину, але розмір самого об'єкта Vector завжди буде однаковим, оскільки він зберігає в собі лише вказівник та цілісну величину розміру масиву.

Оскільки тепер масив елементів знаходиться у private секції. То доступ до його елементів буде здійснюватися через перевантажений оператор квадратних дужок [] , а розмір масиву через метод size().

double read_and_sum(int s)
{
    Vector v(s);  // Создаём вектор элементов
    for (int i=0; i!=v.size(); ++i)
        cin>>v[i];  // Считываем элементы из ввода и записываем в вектор

    double sum = 0;
    for (int i=0; i!=v.size(); ++i)
        sum+=v[i];  // Суммируем элементы
    return sum;
}

У класі Vector є функція з такою самою назвою Vector(int). Ця функція є конструктором класу Vector, яка виконує необхідні дії ініціалізації об'єкта під час його створення. Клас може мати кілька конструкторів.

Vector(int s) 
    : elem {new double[s]}, 
      sz{s} 
{ }

У конструкторі проводиться ініціалізація елементів за допомогою initializer list , який є елементом стандарту C++11.

Тут не показаний механізм обробки помилок та роботи з деструктором, але про це пізніше.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

alex_lip
  • 03 квітня 2018 р. 14:09

В функции

double read_and_sum(int s)

есть лишний пробел в
i!=v.siz e(); 
v.siz_e()

Evgenii Legotckoi
  • 03 квітня 2018 р. 15:06

Спасибо, поправил.

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84бали,
  • Рейтинг балів4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42бали,
  • Рейтинг балів-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47бали,
  • Рейтинг балів-6
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 21:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 23:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 17:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 16:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 20:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
AH
Abdul Hadi13 лютого 2025 р. 15:21
Are you Looking for best painter services in Qatar? Looking for top painter Services in Qatar? Get high-quality, affordable, and professional painting for homes & offices. Contact expert painters today!
d
dubaicushions13 лютого 2025 р. 15:17
Are Looking for custom swing cushions in Dubai for home decor? Looking for Custom Swing Cushions in Dubai? Get high-quality, weather-resistant, and stylish cushions for your outdoor swing. Order now for comfort & elegance!
d
dubaicustomizedsofa13 лютого 2025 р. 15:11
Are you Looking for a custom sofa in Dubai? Looking for a Custom Sofa in Dubai ? Get high-quality, stylish, and tailor-made sofas to match your space. Order now for comfort, luxury, and perfect design!
b
blinds1211 лютого 2025 р. 16:08
Why Bamboo Blinds Are the Perfect Choice for Your Home When it comes to enhancing the aesthetics and functionality of your living space, choosing the right window treatment is crucial. Bamboo blinds have emerged as a popular choice for homeowners wh…
i
imperial313011 лютого 2025 р. 15:40
How to Select the Right Carpet for Your Bedroom Aesthetic Choosing the perfect carpet for your bedroom involves more than just picking a color or pattern you like. Carpets can transform the ambiance of your space, adding warmth, comfort, and style. How…

Слідкуйте за нами в соціальних мережах