Junior
Константтык жана константтык эмес методдор жөнүндө эмне билесиз?
sobes.tech AI
AIден жооп
Константтык ыкмалары (const methods) C++ теги класстын ыкмалары болуп саналат, алар параметрлердин тизмесинен кийин const ачкыч сөзү менен жарыяланат.
class MyClass {
public:
void nonConstMethod(); // Нонконстанттык ыкма
void constMethod() const; // Константтык ыкма
};
const ачкыч сөзү параметрлердин тизмесинен кийин, ыкманын ишке ашырылуучу объекттин абалын өзгөртпөөгө кепилдик берет. Бул ички константтык ыкмада:
- Объекттин статикалык эмес мүчөлөрүн өзгөртүүгө болбойт.
- Тек гана башка константтык ыкмаларды чакырса болот.
Константтык ыкмалардын максаты:
- Коопсуздук: Объекттин абалын случайдуу өзгөртүүдөн коргойт.
- Константтык объекттер менен колдонуу: Константтык объекттер (
constменен жарыяланган) тек гана константтык ыкмаларды чакыра алат. Нонконстанттык ыкмалар жеткиликтүү эмес. - Жүктөө: Ыкмалар константтыктыкка жараша жүктөлө алат. Бул бир эле аталыштагы жана параметрлердин сигнатурасы бар эки ыкманы түзүүгө мүмкүндүк берет, бирок бири константтык, экинчиси — нонконстанттык. Компилятор кайсынысын колдонуу керектигин объекттин константтык же нонконстанттык экенине карап тандоого мүмкүндүк берет.
class MyClass {
int value;
public:
int getValue() const { // Константтык версия
return value;
}
int getValue() { // Нонконстанттык версия
return value++; // Абалдын өзгөрүшүнө мүмкүнчүлүк
}
};
void test(const MyClass& objConst, MyClass& objNonConst) {
objConst.getValue(); // Константтык версияны чакырат
objNonConst.getValue(); // Нонконстанттык версияны чакырат
}
Нонконстанттык ыкмалар:
Бул классдын жөнөкөй ыкмалары, алар объекттин абалын өзгөртө алат. Алар const ачкыч сөзү жок, параметрлердин тизмесинен кийин жарыяланат.
Колдонуу:
| Объекттин түрү | Ыкманы чакыруу | Канча ыкма чакырылат | Түшүндүрмө |
|---|---|---|---|
const T |
obj.method() |
Тек гана константтык | Константтык объекттин абалын өзгөртүүгө болбойт |
T |
obj.method() |
Нонконстанттык (эгер бар болсо) | Нонконстанттык ыкмалар абалды өзгөртө алат |
T |
obj.method() const |
Константтык (эгер бар болсо) | Эгер эки версия бар жана нонконстанттык объекттен чакырылса, приоритет — нонконстанттык. Бирок, керек болсо, константтык версияны ачык чакырса болот (аз колдонулат). |
Константтык колдонуу жакшы практика болуп саналат, анткени ал кодуңуздун окуулушу жана коопсуздугун жогорулатат, ошондой эле компиляторго кошумча оптимизацияларды жүргүзүүгө мүмкүндүк берет.