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 Константӣ (агар вуҷуд дошта бошад) Агар ду версия бошанд ва дар объект ғайриконстантӣ даъват шаванд, приоритет ба ғайриконстантӣ аст. Аммо метавон версияи константиро ба таври равшан даъват кард, агар лозим бошад (кам истифода мешавад).

Истифодаи константӣ як амалияи хуб аст, зеро он хондан ва бехатарии коди бештарро таъмин мекунад, инчунин имкон медиҳад, ки компилятор иловагӣ оптимизатсияҳоро иҷро кунад.