Программирование. Принципы и практика использования C++ Исправленное издание, стр. 230
v[4]==4.4Данный вариант класса
vectorget()set()17.7. Указатели на объекты класса
Понятие указателя носит универсальный характер, поэтому мы можем устанавливать его на любую ячейку памяти. Например, можем использовать указатели на объект класса
vectorcharvector* f(int s){ vector* p = new vector(s); // размещаем вектор в свободной // памяти заполняем *p return p;}void ff(){ vector* q = f(4); // используем *q delete q; // удаляем вектор из свободной памяти}Обратите внимание на то, что, когда мы удаляем объект класса
vectordeletevector* p = new vector(s); // размещаем вектор в свободной памятиdelete p; // удаляем вектор из свободной памятиПри создании объекта класса
vector• сначала выделяет память для объекта класса
vector• затем вызывает конструктор класса
vectorvectorУдаляя объект класса
vectordelete• сначала вызывает деструктор класса
vector• затем освобождает память, занятую объектом класса
vectorОбратите внимание на то, как хорошо, что эти операторы работают рекурсивно (см. раздел. 8.5.8). Используя реальный (стандартный) класс
vectorvector< vector<double> >* p = new vector<vector<double> > (10);delete p;Здесь инструкция
delete pvector<vector<double>>vector<double>Поскольку оператор
deletevector
deleteVector_refnewdeleteИтак, все бы ничего, но как же нам получить доступ к членам вектора, используя только указатель? Обратите внимание на то, что все классы поддерживают доступ к своим членам с помощью оператора
.vector v(4);int x = v.size();double d = v.get(3);Аналогично все классы поддерживают работу оператора
–>vector* p = new vector(4);int x = p–>size();double d = p–>get(3);Как и операторы
.–>intdouble–>17.8. Путаница с типами: void* и операторы приведения типов
Используя указатели и массивы, расположенные в свободной памяти, мы вступаем в более тесный контакт с аппаратным обеспечением. По существу, наши операции с указателями (инициализация, присваивание,
*[]Естественно, мы не хотели бы совсем отказываться от защиты, представляемой системой типов, но иногда у нас нет логичной альтернативы (например, когда мы должны обеспечить работу с программой, написанной на другой языке программирования, в котором ничего не известно о системе типов языка С++). Кроме того, существует множество ситуаций, в которых необходимо использовать старые программы, разработанные без учета системы безопасности статических типов.