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

17.Функции-члены класса. Указатель this.

Функция, объявленная в классе без спецификатора friend, называется функцией-членом класса. Её вызов имеет соответствующий синтаксис.

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

class X

{ private:

int n;

public:

void f();

};

// Объявление класса Х

void X::f()

{ n++; }

// Определение функции f из класса Х

X a, b;

// Объявление переменных класса Х

a.f();

// Вызов функции f применяется к переменной а. Таким образом,

// изменяется член n переменной a. Переменная b остаётся без изменений.

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

В объявлении функции после списка параметров можно добавить модификатор const. Это будет означать, что функция не меняет состояние объекта, к которому она применяется. Суффикс const является частью типа функции и должен записываться, когда функция определяется вне класса.

class X

{ private:

int n;

public:

int f() const;

};

int X::f() const

{ return n++; }

// Ошибка – попытка изменить значение члена класса в константной функции

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

4.2. Указатель this

В нестатической функции-члене класса ключевое слово this обозначает указатель на объект, для которого вызвана данная функция, т.е. внутри функции-члена класса член того же класса с именем х можно обозначать как x, и как this -> x. Указатель на объект, для которого вызвана функция, является неявным параметром этой функции.

class X

{ private:

int a;

public:

void f(int a) { this -> a = a; }

};

// Члену класса a присваивается значение параметра a

Указатель this в функции-члене класса Х имеет тип X * const. Однако, это не обычная переменная, невозможно получить её адрес или присвоить ей что-нибудь. В константной функции-члене класса Х this имеет тип const X * const для предотвращения модификации самого объекта.

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

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

class X

{ ...

public:

X& f();

};

X& X::f()

{ ...

return *this;

}

4.3. Встраиваемые функции-члены класса

Функция-член класса может быть описана внутри объявления класса. В этом случае она считаетсявстраиваемой (inline) функцией.

Пример. В обоих случаях функция GetSize является встраиваемой.

class Vector

{ private:

int size;

...public:

int GetSize() { return size; }

...

}

class Vector

{ private:

int size;

...public:

int GetSize();

...

}

inline int Vector::GetSize() { return size; }