Главная страница » C++ » 31. Свойства
В C++ свойства — это механизм, который позволяет управлять доступом к членам класса и обеспечивать контроль над изменениями данных. Свойства позволяют создать интерфейс для работы с данными объекта, скрывая внутреннюю реализацию и защищая данные от некорректного изменения.
Свойства в C++ реализуются с помощью методов доступа, таких как геттеры (методы для получения значения) и сеттеры (методы для установки значения). Это позволяет разделить логику работы с данными и логику их использования.
Геттеры (методы доступа для получения значения) позволяют получить значение приватного члена класса.
Сеттеры (методы доступа для установки значения) позволяют изменить значение приватного члена класса.
				
					class Person {
private:
    std::string name;
    int age;
public:
    // Геттер для имени
    std::string getName() const {
        return name;
    }
    // Сеттер для имени
    void setName(const std::string& newName) {
        name = newName;
    }
    // Геттер для возраста
    int getAge() const {
        return age;
    }
    // Сеттер для возраста
    void setAge(int newAge) {
        if (newAge >= 0) {  // Проверка на допустимость возраста
            age = newAge;
        }
    }
};
 
				
			
		Свойства можно использовать для защиты данных и обеспечения корректности их изменения. Например, вы можете проверить значения перед тем, как установить их в приватные члены класса.
				
					class BankAccount {
private:
    double balance;
public:
    // Геттер для баланса
    double getBalance() const {
        return balance;
    }
    // Сеттер для баланса с проверкой
    void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }
};
 
				
			
		Если ваш класс является базовым в иерархии наследования, вы можете использовать виртуальные методы для геттеров и сеттеров, чтобы обеспечить полиморфное поведение.
				
					class Shape {
public:
    virtual double getArea() const = 0;  // Чисто виртуальный метод
    // Виртуальный деструктор
    virtual ~Shape() {}
};
class Circle : public Shape {
private:
    double radius;
public:
    Circle(double r) : radius(r) {}
    double getArea() const override {
        return 3.14159 * radius * radius;
    }
};
 
				
			
		Методы доступа (геттеры) могут быть помечены как const, чтобы указывать, что они не изменяют состояние объекта. Это позволяет вызывать их на константных объектах.
				
					class Rectangle {
private:
    double width;
    double height;
public:
    Rectangle(double w, double h) : width(w), height(h) {}
    // Константный геттер
    double getWidth() const {
        return width;
    }
    double getHeight() const {
        return height;
    }
};
 
				
			
		Пример 1: Пример класса с приватными членами и методами доступа
				
					#include 
class Student {
private:
    std::string name;
    int grade;
public:
    // Конструктор
    Student(const std::string& n, int g) : name(n), grade(g) {}
    // Геттер для имени
    std::string getName() const {
        return name;
    }
    // Сеттер для имени
    void setName(const std::string& n) {
        name = n;
    }
    // Геттер для оценки
    int getGrade() const {
        return grade;
    }
    // Сеттер для оценки
    void setGrade(int g) {
        if (g >= 0 && g <= 100) {
            grade = g;
        }
    }
};
int main() {
    Student student("Alice", 85);
    std::cout << "Имя: " << student.getName() << std::endl;
    std::cout << "Оценка: " << student.getGrade() << std::endl;
    student.setGrade(90);
    std::cout << "Новая оценка: " << student.getGrade() << std::endl;
    return 0;
}
  
				
			
		Пример 2: Класс с проверкой и защитой данных
				
					#include 
class Temperature {
private:
    double celsius;
public:
    // Конструктор
    Temperature(double temp) : celsius(temp) {}
    // Геттер для температуры
    double getCelsius() const {
        return celsius;
    }
    // Сеттер для температуры с проверкой
    void setCelsius(double temp) {
        if (temp >= -273.15) {  // Температура не может быть ниже абсолютного нуля
            celsius = temp;
        } else {
            std::cout << "Ошибка: температура ниже абсолютного нуля!" << std::endl;
        }
    }
};
int main() {
    Temperature temp(25.0);
    std::cout << "Температура: " << temp.getCelsius() << "°C" << std::endl;
    temp.setCelsius(-300.0);  // Некорректное значение
    std::cout << "Попытка установки некорректного значения: " << temp.getCelsius() << "°C" << std::endl;
    return 0;
}
  
				
			
		Свойства позволяют эффективно управлять доступом к членам класса, защищать данные от некорректных изменений и обеспечивать корректность работы методов. Использование геттеров и сеттеров помогает создать чистый интерфейс для работы с объектами и делает ваш код более гибким и поддерживаемым.
Создайте класс Person, который содержит:
firstName и lastName (строкового типа).В функции main() создайте объект класса Person, установите его имя и фамилию через сеттеры, и выведите полное имя через метод отображения.
Примерный код:
				
					#include 
class Person {
private:
    std::string firstName;
    std::string lastName;
public:
    // Конструктор
    Person(const std::string& fName, const std::string& lName)
        : firstName(fName), lastName(lName) {}
    // Геттеры
    std::string getFirstName() const {
        return firstName;
    }
    std::string getLastName() const {
        return lastName;
    }
    // Сеттеры
    void setFirstName(const std::string& fName) {
        firstName = fName;
    }
    void setLastName(const std::string& lName) {
        lastName = lName;
    }
    // Метод для отображения полного имени
    std::string getFullName() const {
        return firstName + " " + lastName;
    }
};
int main() {
    Person person("John", "Doe");
    std::cout << "Полное имя: " << person.getFullName() << std::endl;
    person.setFirstName("Jane");
    person.setLastName("Smith");
    std::cout << "Обновленное полное имя: " << person.getFullName() << std::endl;
    return 0;
}
  
				
			
		Запустите программу и убедитесь, что она корректно устанавливает и отображает полное имя.
Телефон: +375 33 910-08-92 
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024-2025 Все права защищены. CodeFor.
 
													Язык сайта: