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 |
Կոնստանտային (եթե կա) | Եթե երկու տարբերակներն էլ կան և կանչվում են ոչ կոնստանտային օբյեկտից, նախապատվությունը տալիս է ոչ կոնստանտայինին: Բայց կարելի է հստակ կանչել կոնստանտային տարբերակը, եթե անհրաժեշտ է: |
Կոնստանտության օգտագործումը լավ պրակտիկա է, քանի որ այն բարձրացնում է կարդալու և անվտանգության մակարդակը, ինչպես նաև թույլ է տալիս կոմպիլյատորին կատարել լրացուցիչ օպտիմիզացիաներ: