Сейчас на сайте

Сейчас 4 гостей онлайн
Ссылки PDF Печать E-mail
Автор: Administrator   
07.01.2010 16:06

C++ создает альтернативу указателям C - во многих случаях более безопасную и простую. Объявление, подобное int &i, делает i ссылкой (reference) на целое значение. Внутренне ссылка обрабатывается так же, как и указатель. Приносит выгоду передача больших объектов в функцию с использованием ссылок. Тем не менее ссылки - это не указатели. Ссылка использует отличный от указателей синтаксис. Вы применяете для ссылки на элемент класса или структуры оператор «точка» (. ), а не оператор «стрелка» (->). Ссылочная переменная должна быть проинициализирована при своем создании. Невозможна ссылка, содержащая значение NULL, равно как и невозможно изменить значение ссылки. Заметим, что использование оператора & для объявления ссылки не вступает в противоречие с использованием & в качестве оператора взятия адреса. Я редко использую ссылки, но они необходимы для определенных системных классов. Оператор this Когда вы вызываете функцию-член через запись object.Foo(a, b), компилятор преобразует ее в запись Foo(&object, a, b). Аналогично, если вы определяете функцию-член Foo() в классе, на самом деле используется запись Foo (class *this). Каждая функция-член (за исключением методов класса, описанных со спецификатором static, которые я не собираюсь рассматривать) имеет специальную переменную с именем this - указатель на текущий объект. Внутри функции-члена вы можете вызывать другие функции-члены либо в форме Bar(), либо в форме this->Bar(). Оператор this редко используется явно. Однако он полезен, когда какому-либо объекту необходимо передать другому объекту указатель на себя. (Как в SampledInstrument::NewNote, глава 21. Объект SampledInstrument передает SampledNote указатель на себя для того, чтобы нотный объект получил доступ к общим данным, хранимым в инструментном объекте.) Друзья Соответствующее использование спецификаторов private и public может значительно упростить жизнь. Накладывая ограничения на эксплуатацию вашего класса другими людьми, вы можете упростить будущее изменение реализации. Однако существует одно исключение. Предположим, у вас есть два сильно связанных класса, причем каждый из них должен иметь доступ к приватным данным другого, или специальная функция, требующая доступа к данным класса, которые, в свою очередь, необходимо сделать приватными. Определяя функцию или класс как дружественную (спецификатор friend), вы заставляете компилятор специально разрешить функции или классу доступ к приватным данным. Например, в классе главы 6 мне понадобилось создать функцию, которая не будучи членом класса (чтобы я мог передать указатель на эту функцию системным аудиоутилитам), имела бы доступ к приватным данным класса. Аналогично в главе 21 мне необходимо было сделать так, чтобы объект SampledNote мог обращаться к разделяемой нотной информации, хранимой в ассоциированном объекте SampledInstrument.

Обновлено 07.01.2010 16:09
 

Поиск

Войти



Курсы валют