Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_ООП.docx
Скачиваний:
5
Добавлен:
18.09.2019
Размер:
114.62 Кб
Скачать

22. Константные члены-функции и константные объекты.

Константная функция-член возвращает константный объект, который может использоваться как любой другой константный объект.

Функции-члены inline

Подставляемые (inline) функции – распр-ный вид ф-й-членов в С++. Они были разработаны для повышения эффективности вызовов ф-й членов и предоставления языку объектного подхода, при мин. расходе выч. мощности на вызовы ф-й. Подставляемые ф-и объявляются и опр-ся в объявлении класса без какого-либо спец-ого ключевого слова.

Такие ф-и обрабатываются компилятором почти так же, как и макрос: вызов непосредственно заменяется телом ф-и. Для коротких ф-й такой подход очень эффективен, поскольку отсутствуют инструкции вызова и возврата из ф-и.

Каждый раз, когда вызывается подставляемая ф-я, её вызов заменяется телом ф-и. Это имеет смысл только в том случае, если подставляемые ф-и небольшие. Если же они занимают много места, то прога может стать необоснованно большой.

Сложность подставляемых ф-й ограничена. Если компилятор посчит, что ф-я слишком велика или сложна, то он будет считать её обыкновенной ф-ей - членом.

Ф-и - члены с константным указателем this

Модификатор const применим и к телу функции-члена класса для указания на огранияенность её возможностей. Функции-члены, объявленные таким образом с помощью const, являются новшеством языка С++. В данном случае ключевое слово const не относится к возвращаемому функцией значению, а касается указателя this, используемого в функции. Например:

class Example

{

int value;

public:

int GetValue() const; // обыкновенная функция

int ReadValue() const { return value; }; // подставляемая функция

};

int Example::GetValue() const{ return value; };

23,29. ФункцИИ-друзья.

Функции-друзья — это функции, не являющиеся функциями-членами и, тем не менее, имеющие доступ к защищённым и закрытым членам класса. Они должны быть объявлены в теле класса как friend.

В качестве параметра ей должен передаваться объект или ссылка на объект класса, поскольку указатель this ей не передается.

Например:

class Matrix {

...

friend Matrix Multiply(Matrix m1, Matrix m2);

...

};

Matrix Multiply(Matrix m1, Matrix m2) {

...

}

Здесь функция Multiply может обращаться к любым полям и функциям-членам класса Matrix. Одна функция может "дружить" сразу с несколькими классами. Функция-член одного класса может быть другом другого класса:

class x {

// ...

Void f();

};

class y {

// ...

friend void x::f();

};

Вполне возможно, что все функции одного класса являются друзьями другого класса. Для этого есть краткая форма записи:

Н-р:

class x {

friend class y;

// ...

};

В результате такого описания все функции-члены y становятся друзьями класса x.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]