Программирование >>  Аргументация конструирования 

1 ... 46 47 48 [ 49 ] 50 51 52 ... 108


Глава 15

Создание указателей на объекте!

э*н£)й главе...

Определение массивов указателей

Объявление массивов объектов

Объявление указателей на объекты

Передача объектов функциям

У Возврат к куче

/ Использование связанных списков

Программа Linkeist Data

у жрофаммисты на С + + все время создают массивы чего-либо. Формируются масси-W вы целочисленных значений, массивы действительных значений; так почему бы не создать массив студентов? Студенты все время находятся в списках (причем гораздо чаще, чем им хотелось бы). Концепция объектов Student, стройными рядами ожидающих своей очереди, слишком привлекательна, чтобы можно бхло пройти мимо нее.

OnfteqejeHue массивов ifKosafHeueu

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

Массивы в C++ объявляются с помощью квадратных скобок, в которых содержится количество элементов в массиве.

int array[10]; объявление массива из 10 элементов

К отдельному элементу массива можно обратиться, подсчитав количество домов от

начала улицы до необходимого дома:

аггау[0] рксвоить 10 первому элементу array[9] = 20; присвоить 20 последнему элементу

В этом фрагменте первому элементу массива (элементу под номером 0) присваивается значение 10, а последнему - 2 0.

- Не забывайте, что в C + + массив начинается с элемента с индексом 0 и закан-

чивается элементом, имеющим индекс, равный длине массива минус 1.


Если продолжить аналогию с домами, получится, что имя массива - это название улицы, а номер дома равнозначен номеру элемента в массиве. Таким же образом можно отождествить переменные с их адресом в памяти компьютера. Эти адреса могут быть определены и сохранены для последующего использования.



объявление целочисленной переменной

сохранить ее адрес в pVariable *pVariable = 10; присвоить 10 целочисленной переменной, которую

Указатель pVariable б]л объявлен для того, чтобы хранить в нем адрес переменной variable. После этого целочисленной переменной, находящейся по адресу pVariable, присваивается значение 1С.

Использовав аналогию с домами в последний раз (честное слово, в последний!), мы получим:

у variable - ЭТО дом;

pVariable - это листок с адресом дома;

в последней строке примера происходит отправка сообщения, содер-I жащего 10, по адресу, который находится на листке бумаги. Все почти так же, как на почте (единственное отличие состоит в том, что компьютер не ошибается адресом).

В главе 7, Хранение последовательностей в массивах , описаны основы работы с массивами простгх (встроенных) типов, а в главах 8, Первое знакомство с указателями в С++ , и 9, Второе знакомство с указателями , подробно рассматриваются указатели.

ObsUUeHue массивовобеши>£

Массивы объектов работают так же, как и массивы простых переменных. В качестве примера можно использовать следующий фрагмент: class Student

public:

int semesterHcurs; float gpa;

float addCourse(int hours, float grade);

void someFn()

объявляем массив из 10 студентов Students L10 j ;

Пятый студент получает 5.0 (повезло!) S [4].gpa =5.0;

доэавим еще один курс пятому студенту, который на этот раз провалился... S [4] .addCourseO, 0.0) ;

В данном фрагменте s является массивом объектов тип dent. Запись s[4] означает пятый элемент массива, а значит, s[4] -gpa является усредненной оценкой пятого студента. В следующей строке с помощью функции s [ 4 ] . addCourse () пятому студенту добавляется еще один прослушанный нный курс.



0<}дл4иеш€е ifKosoMeAeu на оЬе/айы

Указатели на объекты работают так же, как и указатели на простые типы.

class Student

public:

int semesterHours;

float gpa;

float addCourse (int hours, float grade) {return 0.0};

in (int argc, char*- pArgs [ ] )

создаем объект типа Student

Student s;

создаем указатель на объект типа Student Student* pS;

заставляем pS указывать на наш объект s pS = is; return 0;

Переменная pS является указателем на объект тина Student ; другими словами, указателем

Разыменование указателей на объекты

По аналогии с указателями на простые переменные можно решить, что в приведенном ниже примере происходит обращение к усредненной оценке студента s.

in {int argc, char* pArgs [) )

этот пример некорректен

Student s;

Student* pS= &s; создаем указатель на объект в

обращаемся к членра объекта, на который указывает pS (этот фрагмент неверен) *pS.gpa = 3.5;

return 0;

Как верно сказано в комментарии, этот работать не будет. Проблема в том, что оператор . будет выполнен раньше оператора

Для изменения порядка выполнения операторов в C++ используют скобки. Так, в приведенном ниже примере компилятор сначала выполнит сложение, а затем умножение.

int i = 2* (1 + 3) стожение выполняется до умножения

В применении к указателям скобки выполняют те же функции.

int main (int argc, ciiar* pArgs [! )

Student s;

Student* pS= &s; создаем указатель на объект s обращаемся к члену gp го объекта, на который

указывает pS (теперь все работает правильно)

(*рЗ) .gpa = 3.5;



1 ... 46 47 48 [ 49 ] 50 51 52 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика