using namespace std;
2 :
void CalculateSquare(const int& Number, int& Result)
заметьте, "const"
{
Result = Number*Number;
6 : }
7:
int main()
{
cout « "Enter a number you wish to square: ";
int Number = 0;
cin » Number;
13:
int Square = 0;
CalculateSquare(Number, Square);
cout « Number « "A2 = " « Square « endl;
return 0;
}
Результат
E n te r a num ber you w ish to s q u a r e : 27
27A2 = 729
Анализ
отличие от предыдущей программы, где передававшая число переменная содержала также и результат, здесь используются две переменные: одна для передачи числа, которое будет возведено в квадрат, а вторая для содержания результата. Для гарантии неизмен ности передаваемого числа оно было помечено как константная ссылка ключевым словом c o n s t (см. строку 3). Это автоматически делает параметр Number входным параметром
(input parameter), значение которого не может быть изменено.
качестве эксперимента можете изменить строку 5 так, чтобы возвратить квадрат, ис пользуя ту же логику, что и в листинге 8.18:
Number *= Num ber;
Вы получите ошибку при компиляции, сообщающую, что значение константы не мо жет быть изменено. Таким образом, константные ссылки — мощный инструмент, предо ставляемый языком C++, для обозначения входных параметров и гарантии того, что пере даваемое по ссылке значение не может быть изменено вызываемой функцией. На первый
Резюме 197
взгляд это может показаться тривиальным, но в коллективе разработчиков, где один пишет первую версию, второй — вторую, третий исправляет или совершенствует ее, использова ние константных ссылок имеет важное значение для качества программы.
Резюме
На этом занятии вы узнали об указателях и ссылках. Вы научились применять указа тели для доступа к областям памяти и манипулирования ими, а также узнали, что указате ли — это инструмент динамического распределения памяти. Вы изучили операторы new л d e l e te , применяемые при резервировании памяти для элемента, а также их варианты
ew . . . [ ] и d e l e t e [ ], позволяющие резервировать память для массива данных. Вы озна комились с возможными проблемами при использовании указателей и динамического рас пределения, а также узнали о том, что освобождение динамически распределенной памяти зажно для предотвращения ее утечек. Ссылки — это псевдонимы, являющиеся мощной альтернативой использованию указателей при передаче аргументов функциям, поскольку они гарантируют их допустимость. Вы узнали о “правильности констант” при использо вании указателей и ссылок, и надеюсь, впредь будете объявлять функции с самым ограни чивающим уровнем константности параметром из всех возможных.
Do'stlaringiz bilan baham: |