20 Область действия имени класса. Ключевое слово this.

Область действия имени класса является локальной с некоторыми особенностями, характерными для классов.

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

struct S{}

int S (struct S *sPtr);

void func()

{

S S1; неправильно

struct S s; правильно

S(&s); правильно

}

Допускается также неполное определение класса.

class X

struct Z

Пример:

class Y;

class X

{

Y*ptr

}

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

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

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

Пример:

class C1

{

int Data;

f1(int A);

f1(float A);

f1(int A, intB);

f1 (c1, mc1)

}

Допустим спецификатор класса памяти static.

class C1

{

static int Data;

}

Будет создан единственный экземпляр данных Data

C1 mC1, mC2;

mC1.Data=10;

A=mC2.Data; // (A=10)

Ключевое слово this

Нестатические методы работают с объектами типа класса, с которыми они вызываются.

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

class A

{

int i;

int f();

} B;

int A::f()

{

return i; // (this->i)

}

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

Метод м.б. объявлен в классе, а определен в другом месте, м.б. объявлен и определен в своем классе, тогда это встраиваемая функция.

class A

{

int i;

inline int f(); - встраиваемая функция определена в другом месте

}

Hosted by uCoz