Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Константные методы, их аргументы и константные объекты.

Циклы и ветвления | Синтаксис определения структуры, структурной переменной. Доступ к полям структуры, присвоение структурных переменных. | Синтаксис определения, инициализация указателя на структуру. Работа с полями структуры через указатели. | Определение функции. Передача аргументов и возврат значения по значению, ссылке и указателю. Аргументы по умолчанию. Константы аргументов функции. | Перегруженные функции. Встроенные функции. Рекурсивные функции. | Область видимости и класс памяти. | Объявление и инициализация одномерного и двумерного массивов. Работа с элементами массива через указатель. | Принципы ООП. Инкапсуляция. Наследование. Полиморфизм. | Конструкторы и деструкторы. Конструкторы копирования по умолчанию. | Объекты как аргументы методов и доступ к их числам. |


Читайте также:
  1. IV. Биогенетические методы, способствующие увеличению продолжительности жизни
  2. Аргументы
  3. Аргументы в пользу рыночной экономики.
  4. Аргументы в пользу социальной ответственности
  5. Аргументы против рыночной экономики.
  6. Аргументы против социальной ответственности
  7. Аргументы слабовольного

Константные методы отличаются тем, что не изменяют значений полей своего класса. Для того чтобы сделать ф-ию константной, необходимо указать ключевое слово 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

mybiblioteka.su - 2015-2024 год. (0.006 сек.)