Главная страница » 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 Все права защищены. CodeFor.