Объектно-ориентированное программирование на языке С++. Лясин Д.Н - 36 стр.

UptoLike

Составители: 

36
и то же имя this. Вот как могла бы выглядеть функция-член SetBank после её
переопределения:
void client::client_SetBankl(client const *this, bank& b)
{ b.spisok[b.count]=this;
b.count++;
strcpy(this->BankName,b.Name);
}
На втором этапе преобразуются вызовы функций-членов. К списку зна-
чений параметров выражения вызова добавляется выражение, значением ко-
торого является адрес данного объекта. Это вполне корректное преобразова-
ние. Дело в том, что нестатические функции-члены всегда вызываются для
конкретного объекта. И потому не составляет особого труда определить адрес
объекта. Например, вызов
функции-члена SetBank для объекта c, который
имеет вид
c.SetBank(SB);
после преобразования принимает вид:
client_SetBank(&c,SB);
Первый параметр в вызове новой функции является адресом конкретного
объекта. В результате такого преобразования функция-член приобретает новое
имя и дополнительный параметр типа указатель на объект со стандартным
именем this и типом, а каждый вызов функции-члена приобретает форму вы-
зова обычной функции.
Причина изменения имени для функций-членов класса очевидна
. В раз-
ных классах могут быть объявлены одноименные функции-члены. В этих ус-
ловиях обращение к функции-члену класса непосредственно по имени может
вызвать конфликт имён: в одной области действия имени одним и тем же име-
нем будут обозначаться различные объекты - одноименные функции-члены
разных классов. Стандартное преобразование имён позволяет
решить эту про-
блему.
и то же имя this. Вот как могла бы выглядеть функция-член SetBank после её
переопределения:
void client::client_SetBankl(client const *this, bank& b)
{ b.spisok[b.count]=this;
  b.count++;
  strcpy(this->BankName,b.Name);
}
      На втором этапе преобразуются вызовы функций-членов. К списку зна-
чений параметров выражения вызова добавляется выражение, значением ко-
торого является адрес данного объекта. Это вполне корректное преобразова-
ние. Дело в том, что нестатические функции-члены всегда вызываются для
конкретного объекта. И потому не составляет особого труда определить адрес
объекта. Например, вызов функции-члена SetBank для объекта c, который
имеет вид
         c.SetBank(SB);
после преобразования принимает вид:
         client_SetBank(&c,SB);
      Первый параметр в вызове новой функции является адресом конкретного
объекта. В результате такого преобразования функция-член приобретает новое
имя и дополнительный параметр типа указатель на объект со стандартным
именем this и типом, а каждый вызов функции-члена приобретает форму вы-
зова обычной функции.
      Причина изменения имени для функций-членов класса очевидна. В раз-
ных классах могут быть объявлены одноименные функции-члены. В этих ус-
ловиях обращение к функции-члену класса непосредственно по имени может
вызвать конфликт имён: в одной области действия имени одним и тем же име-
нем будут обозначаться различные объекты - одноименные функции-члены
разных классов. Стандартное преобразование имён позволяет решить эту про-
блему.



                                                   36