Sobes.tech
Junior

Sabit və qeyri-sabit metodlər haqqında nə bilirsiniz?

sobes.tech Süni İntellekt

AI-dan cavab

C++-də sabit metodlar (const methods), parametr siyahısından sonra const açar söz ilə elan olunan sinif metodlarıdır.

class MyClass {
public:
    void nonConstMethod();         // Non-sabit metod
    void constMethod() const;      // Sabit metod
};

Parametr siyahısından sonra const açar sözü, metodun çağırıldığı obyektin vəziyyətini dəyişməyəcəyini təmin edir. Bu, sabit metod daxilində:

  • Obyektin statik olmayan məlumat üzvlərinin dəyişdirilməməsinə imkan verir.
  • Yalnız eyni obyektin digər sabit metodlarını çağırmağa imkan verir.

Sabit metodların məqsədi:

  1. Təhlükəsizlik: Təsadüfi vəziyyət dəyişikliklərinin qarşısını alır.
  2. Sabit obyektlərlə istifadə: const ilə elan olunan sabit obyektlər yalnız sabit metodları çağıra bilər. Sabit olmayan metodlar onlara əlçatan deyil.
  3. Yüklenmə: Metodlar, sabitlik baxımından yüklənə bilər. Bu, eyni ad və parametr imzasına malik iki metodun olmasına imkan verir, biri sabit və digəri deyil. Kompilyator, çağırışın sabit və ya qeyri-sabit obyekt üzərində olub-olmadığına görə uyğun versiyanı seçəcək.
class MyClass {
    int value;
public:
    int getValue() const { // Sabit versiya
        return value;
    }
    int getValue() {       // Qeyri-sabit versiya
        return value++;    // Vəziyyəti dəyişdirmək imkanı
    }
};

void test(const MyClass& objConst, MyClass& objNonConst) {
    objConst.getValue();    // const versiya çağırılır
    objNonConst.getValue(); // non-const versiya çağırılır
}

Qeyri-sabit metodlar:

Bu, sinifin adi metodlarıdır və obyektin vəziyyətini dəyişə bilər. Onlar parametr siyahısından sonra const açar sözü olmadan elan edilir.

İstifadə:

Ob'ekt tipi Metod çağırışı Hansı metod çağırılacaq İzah
const T obj.method() Yalnız sabit metod Sabit obyektin vəziyyəti dəyişdirilə bilməz.
T obj.method() Qeyri-sabit metod Vəziyyəti dəyişə bilər.
T obj.method() const Sabit metod Əgər hər iki versiya mövcuddursa və qeyri-sabit obyekt üzərində çağırılırsa, prioritet qeyri-sabit versiyaya verilir. Ancaq, obyektə açıq cast etmək mümkündür, əgər sabit versiyanı çağırmaq istəyirsinizsə (nadirdir).

Sabitlikdən istifadə yaxşı təcrübədir, çünki bu, kodun oxunaqlığını və təhlükəsizliyini artırır, həmçinin, kompilyatora əlavə optimizasiyalar etməyə imkan verir.