TGViewer
C/C++ | Вопросы собесов C/C++ | Вопросы собесов @easy_c_plus · 4.19K subscribers
Post #2155 720
🤔 Расскажи про константные методы?

Это методы класса, которые гарантируют, что они не будут изменять состояние объекта, для которого вызываются. Эти методы можно вызывать на константных объектах и через константные ссылки или указатели. Ключевое слово const после объявления метода указывает, что метод является константным.

🚩Объявление и определение константного метода

Чтобы объявить метод как константный, нужно добавить ключевое слово const после списка параметров метода:
class MyClass {
public:
int getValue() const; // Константный метод
void setValue(int newValue); // Неконстантный метод

private:
int value;
};

// Определение константного метода
int MyClass::getValue() const {
return value; // Допустимо: метод не изменяет состояние объекта
}

// Определение неконстантного метода
void MyClass::setValue(int newValue) {
value = newValue; // Допустимо: метод изменяет состояние объекта
}


🚩Пример использования константных методов

#include <iostream>

class MyClass {
public:
MyClass(int v) : value(v) {}

int getValue() const { // Константный метод
return value;
}

void setValue(int newValue) { // Неконстантный метод
value = newValue;
}

private:
int value;
};

int main() {
MyClass obj(10);

std::cout << "Value: " << obj.getValue() << std::endl; // Вывод: 10

obj.setValue(20);
std::cout << "New value: " << obj.getValue() << std::endl; // Вывод: 20

// Константный объект
const MyClass constObj(30);
std::cout << "Const object value: " << constObj.getValue() << std::endl; // Вывод: 30

// constObj.setValue(40); // Ошибка: setValue не может быть вызван для константного объекта

return 0;
}


🚩Почему и когда использовать константные методы

🟠Гарантия неизменности
Константные методы гарантируют, что состояние объекта не будет изменено. Это полезно для методов, которые предназначены только для чтения данных объекта, например, методы доступа (геттеры).
🟠Безопасность и семантика
Константные методы помогают лучше понимать код и повышают его безопасность, так как ясно видно, какие методы могут изменять состояние объекта, а какие нет.
🟠Работа с константными объектами
Константные методы можно вызывать на константных объектах и через константные ссылки или указатели. Это позволяет использовать объекты в контексте, где важно гарантировать их неизменность.

🚩Вызов константных методов на константных объектах

const MyClass constObj(30);
constObj.getValue(); // Допустимо: getValue — константный метод
// constObj.setValue(40); // Ошибка: setValue — неконстантный метод


Ставь 👍 и забирай 📚 Базу знаний
  • 💊 1
More from @easy_c_plus
  1. Oct 13, 2026🤔 Как устроена хеш-таблица в unordered_map? В unordered_map используется хеш-таблица с це…
  2. Oct 13, 2026🤔 Расскажите про ключевое слово _fastcall? Это соглашение о вызове функций, используемое…
  3. Oct 13, 2026Post #2566
  4. Oct 12, 2026🤔 Какие есть уровни exception гарантий? 1. No-throw Guarantee: метод или операция не выбр…
  5. Oct 12, 2026🤔 Какая сложность поиска в set и unordered_set? Контейнеры set и unordered_set представля…
  6. Oct 11, 2026Post #2563
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →