Sobes.tech
Junior

Константтык жана константтык эмес методдор жөнүндө эмне билесиз?

sobes.tech AI

AIден жооп

Константтык ыкмалары (const methods) C++ теги класстын ыкмалары болуп саналат, алар параметрлердин тизмесинен кийин const ачкыч сөзү менен жарыяланат.

class MyClass {
public:
    void nonConstMethod();         // Нонконстанттык ыкма
    void constMethod() const;      // Константтык ыкма
};

const ачкыч сөзү параметрлердин тизмесинен кийин, ыкманын ишке ашырылуучу объекттин абалын өзгөртпөөгө кепилдик берет. Бул ички константтык ыкмада:

  • Объекттин статикалык эмес мүчөлөрүн өзгөртүүгө болбойт.
  • Тек гана башка константтык ыкмаларды чакырса болот.

Константтык ыкмалардын максаты:

  1. Коопсуздук: Объекттин абалын случайдуу өзгөртүүдөн коргойт.
  2. Константтык объекттер менен колдонуу: Константтык объекттер (const менен жарыяланган) тек гана константтык ыкмаларды чакыра алат. Нонконстанттык ыкмалар жеткиликтүү эмес.
  3. Жүктөө: Ыкмалар константтыктыкка жараша жүктөлө алат. Бул бир эле аталыштагы жана параметрлердин сигнатурасы бар эки ыкманы түзүүгө мүмкүндүк берет, бирок бири константтык, экинчиси — нонконстанттык. Компилятор кайсынысын колдонуу керектигин объекттин константтык же нонконстанттык экенине карап тандоого мүмкүндүк берет.
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 Константтык (эгер бар болсо) Эгер эки версия бар жана нонконстанттык объекттен чакырылса, приоритет — нонконстанттык. Бирок, керек болсо, константтык версияны ачык чакырса болот (аз колдонулат).

Константтык колдонуу жакшы практика болуп саналат, анткени ал кодуңуздун окуулушу жана коопсуздугун жогорулатат, ошондой эле компиляторго кошумча оптимизацияларды жүргүзүүгө мүмкүндүк берет.