💀
Второй курс РПО
C++
C++
  • Свойства и типы
  • Блок-схемы
  • Visual Studio
  • Первый проект
  • Вывод данных
  • Типы данных
  • Переменные и Константы
  • Ввод данных
  • Литералы
  • Задание [ ! ]
  • Первая практическая
  • Операторы в языке программирования
  • Арифметические операции в C++
  • Применение арифметических операций
  • Практическая работа №2
  • Практическая работа №3
  • Логические операции
    • Справочник по командам
  • Практическая работа №4
  • Практическая работа №5
  • Массивы
    • Спец. задание
  • ⚙️Справочник по C++
  • Домашнее задание №1
  • Функции
    • Более краткая версия
  • Практическая работа №6
  • Указатели
  • Задание на экране 12.12
  • Введение в строки
  • Перегрузка функций в C++
  • Функции класса
  • Полезные штуки
  • Работа с классами в C++
  • Дружественные классы в C++
Powered by GitBook
On this page
  • Определение класса
  • Пример простого класса:
  • Конструкторы классов
  • Пример конструктора с параметрами:
  • Инкапсуляция: private и public
  • Пример инкапсуляции:
  • Наследование
  • Пример:
  • Полиморфизм: Виртуальные функции
  • Пример:
  • Разбор кода с проверкой значений в конструкторе
  • Код:
  • Разбор:
  • Заключение

Работа с классами в C++

19.02.2025

Классы в C++ — это основа объектно-ориентированного программирования (ООП). Они позволяют объединять данные (поля) и методы (функции) в единую сущность. Использование классов делает код более структурированным и удобным для расширения.

Определение класса

Класс объявляется с помощью ключевого слова class, после которого указываются его поля (переменные) и методы (функции).

Пример простого класса:

#include <iostream>
using namespace std;

class Point {
public:
    int x{ 0 };
    int y{ 0 };
};

int main() {
    setlocale(LC_ALL, "Russian");
    Point p;
    cout << "Координаты: " << p.x << ", " << p.y << endl;
    return 0;
}

Здесь x и y — это поля класса, а класс Point представляет точку с координатами.


Конструкторы классов

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

Пример конструктора с параметрами:

class Point {
public:
    int x;
    int y;

    Point(int xVal, int yVal) { // Конструктор
        x = xVal;
        y = yVal;
    }
};

int main() {
    setlocale(LC_ALL, "Russian");
    Point p(10, 20); // Создание объекта с начальными значениями
    cout << "Координаты: " << p.x << ", " << p.y << endl;
    return 0;
}

Важно: Если не определить конструктор вручную, компилятор создаст его автоматически.


Инкапсуляция: private и public

Инкапсуляция — это ограничение доступа к данным внутри класса. В C++ есть три уровня доступа:

  • private — доступ только внутри класса.

  • public — доступ открыт для всех.

  • protected — используется при наследовании (рассматривается ниже).

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

class Car {
private:
    string model;
    int speed;

public:
    void setModel(string m) { model = m; }
    string getModel() { return model; }

    void setSpeed(int s) {
        if (s >= 0) speed = s;
    }
    int getSpeed() { return speed; }
};

Здесь model и speed закрыты (private), и изменить их можно только через сеттеры setModel() и setSpeed().


Наследование

Один класс может наследовать свойства другого, используя public, private или protected наследование.

Пример:

class Animal {
public:
    void makeSound() { cout << "Какой-то звук..." << endl; }
};

class Dog : public Animal {
public:
    void makeSound() { cout << "Гав-гав!" << endl; }
};

Теперь Dog наследует метод makeSound() и может его переопределить.


Полиморфизм: Виртуальные функции

Полиморфизм позволяет вызывать переопределённые методы через указатель на базовый класс.

Пример:

class Animal {
public:
    virtual void makeSound() { cout << "Животное издает звук" << endl; }
};

class Cat : public Animal {
public:
    void makeSound() override { cout << "Мяу!" << endl; }
};

int main() {
    setlocale(LC_ALL, "Russian");
    Animal* a = new Cat();
    a->makeSound(); // Выведет "Мяу!"
    delete a;
    return 0;
}

Ключевое слово virtual позволяет правильно вызывать метод makeSound() у производного класса.


Разбор кода с проверкой значений в конструкторе

Код:

#include <iostream>

class Point {
public:
    int x{ 0 };
    int y{ 0 };
    
    Point(int x, int y) {
        if (x < 0 and y >= 0) {
            this->x = 0;
            this->y = y;
        }
        if (y < 0 and x >= 0) {
            this->y = 0;
            this->x = x;
        }
        if (y < 0 and x < 0) {
            this->x = 0;
            this->y = 0;
        }
    }

    void print() {
        std::cout << "x " << x << " y " << y << std::endl;
    }
};

int main() {
    Point test(10, -10);
    test.print();
    return 0;
}

Разбор:

  1. Конструктор корректирует координаты:

    • Если x отрицательный, но y положительный → x = 0.

    • Если y отрицательный, но x положительный → y = 0.

    • Если оба отрицательные → оба становятся 0.

  2. Вывод:

    • Point test(10, -10); → x = 10, y = 0.

    • test.print(); → Выведет x 10 y 0.

Оптимизированный вариант конструктора:

Point(int x, int y) {
    this->x = (x < 0) ? 0 : x;
    this->y = (y < 0) ? 0 : y;
}

Этот вариант работает так же, но код стал короче и читаемее.


Заключение

Классы позволяют структурировать код и избегать дублирования логики. Важные принципы:

  • Инкапсуляция (скрытие данных, сеттеры и геттеры).

  • Наследование (переиспользование кода, public, protected, private).

  • Полиморфизм (virtual-функции для переопределения методов).

PreviousПолезные штукиNextДружественные классы в C++

Last updated 3 months ago