Читайте также: |
|
Константные методы отличаются тем, что не изменяют значений полей своего класса. Для того чтобы сделать ф-ию константной, необходимо указать ключевое слово const после прототипа ф-ии, но до начала тела. Если объявление и определение ф-ии разделены, то модификатор const необходимо указывать дважды — при объявлении ф-ии, и при ее определении. Рассмотрим это на примере:
class aClass
{
private:
int alpha;
public:
void nonFunc() // неконстантный метод
{ alpha = 99; } // корректно
void conFunc()const // константный метод
{ alpha = 99; } // ошибка: нельзя изменить значение поля
};
Обычный метод nonFunc() может изменить значение поля alpha, а константный метод conFunc() не может. Если со стороны последнего будет предпринята попытка изменить поле alpha, компилятор выдаст сообщение об ошибке.
Если вы хотите передать аргумент в метод класса по ссылке и в то же время защитить его от изменения, необходимо сделать этот аргумент константным при объявлении и определении метода. Например так:
Distance Distance::add_dist(const Distance& d2) const
{ /* какие-то действия */}
Мы можем применять модификатор const и для объектов классов. Если объект класса объявлен с модификатором const, он становится недоступным для изменения. Это означает, что для такого объекта можно вызывать только константные методы, поскольку только они гарантируют, что объект не будет изменен. В качестве примера рассмотрим программу:
class Distance
{
private:
int feet;
float inches;
public:
Distance (int ft, float in): feet(ft), inches(in) { }
// конструктор с двумя аргументами
void getdist() // неконстантный метод
{ cout << "\nВведите число футов: "; cin >> feet;
cout << "Введите число дюймов: "; cin >> inches;
}
void showdist() const // константный метод
{ cout << feet << "\'-" << inches << '\"'; }
};
int main()
{
const Distance football(300,0);
//football.getdist(); // ошибка: метод getdist() неконстантный
cout << " Длина поля равна ";
football.showdist(); // корректно
}
Когда создается класс, всегда является хорошим стилем объявлять константными функции, не изменяющие полей объектов класса. Это позволяет тому, кто использует данный класс, создавать константные объекты класса. Из этих объектов могут вызываться только константные функции.
Дата добавления: 2015-08-17; просмотров: 106 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Размещение в памяти членов объектов одного класса и способ создания общих полей (св-в). | | | Строки на основе массива типа char и класса string |