Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 34
- 35
- 36
- 37
- 38
- …
- следующая ›
- последняя »