Модификатор const применим и к телу функции-члена класса для указания на огранияенность её возможностей. Функции-члены, объявленные таким образом с помощью const, являются новшеством языка С++. В данном случае ключевое слово const не относится к возвращаемому функцией значению, а касается указателя this, используемого в функции. Например:
class Example
{
int value;
public:
Int GetValue() const; // обыкновенная функция
int ReadValue() const { return value; }; // подставляемая функция
};
int Example::GetValue() const{ return value; };
ФункцИИ-друзья.
Функции-друзья — это функции, не являющиеся функциями-членами и, тем не менее, имеющие доступ к защищённым и закрытым членам класса. Они должны быть объявлены в теле класса как 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.