Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Классы и объекты в C++: практическое руководство с примерами кода

Что такое класс?

Класс в C++ — пользовательский тип данных, объединяющий данные и функции, работающие с этими данными, в единую сущность. Представьте его как чертеж: он описывает структуру и поведение объектов, которые могут быть созданы на его основе.

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

Классы и объекты в C++: практическое руководство с примерами кода

На иллюстрации один прототип производит два различных дома с разными свойствами.

В этом уроке вы узнаете:

Объявление класса

Объявление класса простое: используйте ключевое слово class, имя класса и заключите тело в фигурные скобки.

Синтаксис

class className {
    // члены-данные
    // функции-члены
};

Модификаторы доступа: private vs public

Модификаторы доступа контролируют видимость членов класса.

Создание объектов (инстанцирование)

Объекты — экземпляры класса. Объявление объекта аналогично объявлению переменной: className objectName;

Синтаксис

className objectName;

Инстанцирование выделяет память под объект и может вызвать его конструктор.

Доступ к членам-данным

Публичные члены-данные доступны через оператор точка (.).

Пример: Публичные члены


#include <iostream>
using namespace std;
class Phone {
public:
    double cost;
    int slots;
};
int main() {
    Phone Y6;
    Phone Y7;
    Y6.cost = 100.0;
    Y6.slots = 2;
    Y7.cost = 200.0;
    Y7.slots = 2;
    cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
    cout << "Cost of Huawei Y7 : " << Y7.cost << endl;
    cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
    cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;
    return 0;
}

Вывод:

Классы и объекты в C++: практическое руководство с примерами кода

Зачем нужны геттеры/сеттеры?

Прямой доступ к данным может нарушить инкапсуляцию. Использование геттеров и сеттеров> (функций-членов для чтения/записи) даёт контролируемый доступ.

Пример с инкапсуляцией


#include <iostream>
using namespace std;
class ClassA {
public:
    void setA(int val);
    int getA() const;
private:
    int a;
};
int ClassA::getA() const {
    return a;
}
void ClassA::setA(int val) {
    a = val;
}
int main() {
    ClassA obj;
    obj.setA(20);
    cout << "Value of a is: " << obj.getA();
    return 0;
}

Вывод:

Классы и объекты в C++: практическое руководство с примерами кода

Protected-члены и наследование

Protected-члены доступны внутри класса и в производных классах, обеспечивая контролируемое наследование.

Пример


#include <iostream>
using namespace std;
class ParentClass {
protected:
    int value;
};
class ChildClass : public ParentClass {
public:
    void setId(int x) { value = x; }
    void displayValue() { cout << "Value is: " << value << endl; }
};
int main() {
    ChildClass c;
    c.setId(21);
    c.displayValue();
    return 0;
}

Вывод:

Классы и объекты в C++: практическое руководство с примерами кода

Функции-члены внутри и вне класса

Функции-члены могут быть определены внутри класса (inline) или объявлены внутри и определены позже через оператор разрешения области видимости ::.

Пример


#include <iostream>
#include <string>
using namespace std;
class Guru99 {
public:
    string tutorial_name;
    int id;
    void printName();
    void printId() { cout << "Tutorial id is: " << id; }
};
void Guru99::printName() {
    cout << "Tutorial name is: " << tutorial_name;
}
int main() {
    Guru99 guru;
    guru.tutorial_name = "C++";
    guru.id = 1001;
    guru.printName();
    cout << endl;
    guru.printId();
    return 0;
}

Вывод:

Классы и объекты в C++: практическое руководство с примерами кода

Конструкторы и деструкторы

Конструкторы инициализируют объекты при создании, деструкторы очищают ресурсы непосредственно перед уничтожением объекта.

Пример


#include <iostream>
using namespace std;
class ClassA {
public:
    ClassA() { cout << "Class constructor called" << endl; }
    ~ClassA() { cout << "Class destructor called" << endl; }
};
int main() {
    ClassA a; // конструктор вызван
    int p = 1;
    if (p) {
        ClassA b; // конструктор вызван, деструктор — в конце блока
    } // деструктор для 'b' вызван здесь
    return 0;
} // деструктор для 'a' вызван здесь

Вывод:

Классы и объекты в C++: практическое руководство с примерами кода

Ключевые выводы

  • C++ фундаментально объектно-ориентирован; классы — строительные блоки.
  • Класс группирует данные и связанные функции, создавая переиспользуемый чертеж.
  • Используйте public, private, protected для обеспечения инкапсуляции.
  • Инстанцируйте объекты именем класса и именем объекта.
  • Доступ к публичным членам через оператор точка; для приватных — геттеры/сеттеры.
  • Функции-члены можно определять внутри класса или снаружи через ::.
  • Конструкторы инициализируют объекты; деструкторы занимаются очисткой.

Язык C

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
  3. Дружественные функции и классы в C++: мастерство контроля доступа
  4. Шаблоны классов в C++: практическое руководство
  5. Операторы в C++: типы, примеры и практические программы
  6. Оператор switch-case в C++: синтаксис, применение и практические примеры
  7. Динамическое выделение массивов в C++: практическое руководство с примерами кода
  8. Структуры (struct) в C++: объяснение с практическим примером
  9. Освоение std::list в C++: синтаксис, функции и практические примеры
  10. C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования