Например, у меня есть следующий код.
#include
void print() const {cout << x;}
// ^^^^^
int getx() const {return x;}
// ^^^^^
X operator-(const X& rop) {return x + 2*rop.x;}
// ^^^^^
int operator-(int rop) {return 2*x + rop;}
};
int operator-(int lop, const X& rop) {
// ^^^^^
return lop – rop.getx();
}
int main() {
X x {6},y;
cout << x – 3 – y;
return 0;
}
Подскажите, пожалуйста, каково назначение ключевого слова const в сигнатуре функций?
Ответ
Чтобы этот код мог работать с константными объектами. Это const означает, что вызов метода print() не изменит состояния объекта.
void print() const {cout << x;}
int getx() const {return x;}
Здесь вы никак не меняете объект класса - поэтому нет никакого смысла делать НЕ const (мое мнение - лучше делать все, что только можно, с const, применяя его по умолчанию, и не использовать его только там, где это необходимо), зато эти методы можно будет вызвать, например, при передаче объекта в качестве константного параметра - вот как тут:
X operator-(const X& rop) {return x + 2*rop.x;}
Вы же никак не меняете rop, так что можете теперь вызывать оператор для любого объекта, в том числе временного.
Кстати, операторы я бы тоже делал константными, типа
X operator-(const X& rop) const {return x + 2*rop.x;}
поскольку они никак не меняют состояние объекта.
Комментариев нет:
Отправить комментарий