КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Указатель на объект
Массивы объектов Объекты – это переменные, и они имеют те же возможности и свойства, что и переменные любых других типов. Поэтому вполне допустимо создавать массивы объектов. Синтаксис объявления массива объектов и доступ к его элементам совершенно аналогичны обычным массивам. // Пример 12.7. Создание и использование одномерного массива объектов. #include <iostream > using namespace std; class Samp{ int x; public: voidsetx(int n){x = n;} int getx(){return x;} }; int main(){ Samp ob[4]; // массив объектов из 4-х элементов for(int i = 0; i < 4; i++) // присваивание элементам массива ob[i].setx(i); // значений от 0 до 3 for(int i = 0; i < 4; i++) // чтение элементов массива cout<< ob[i].getx()<<' '; // и вывод их на экран – 0 1 2 3 system("pause"); } В этом примере следует обратить внимание, как вызываются функции для каждого элемента массива. Имя массива объектов, в данном случае ob, индексируется; затем для доступа к элементу массива объектов применяется операция точка (.), за которой следует имя вызываемой функции (в нашем примере это функции setx() и getx()). Аналогично создаётся` и используется двумерный массив объектов: … Samp ob[2][4]; // двумерный массив объектов // из 2 строк и 4 столбцов int k = 1;
for(int i = 0; i < 2; i++) // присваивание элементам массива for(int j = 0; j < 4; j++){ // объектов значений от 1 до 8 ob[i][j].setx(k); k++; cout<< ob[i][j].getx()<<' '; // вывод элементов массива объектов } … Если класс включает конструктор с параметрами, то массив объектов такого класса можно инициализировать явно. // Пример 12.8. Явная инициализация одномерного массива объектов. #include <iostream > using namespace std; class Samp{ int x; public: Samp(int n){x = n;} int getx(){return x;} }; int main(){ Samp ob[4] = { 1, 2, 3, 4 }; // создание массива объектов ob, // вызов конструктора 4 раза for(int i = 0; i < 4; i++) // вывод элементов массива ob
cout<< ob[i].getx()<<' '; // 1 2 3 4 system("pause"); } Указатель на объект – это переменная, которая хранит адрес объекта в памяти компьютера. Для объявления указателя на объект используется тот же синтаксис, как и в случае объявления указателя на переменную любого типа – следует добавить звёздочку после идентификатора типа объекта, непосредственно или через пробел: Samp * p; // объявление указателя на тип Samp При объявлении более чем одного указателя звёздочка ставится перед каждым из них. Как и другие переменные, помимо объявления, указатели требуют инициализации, так как в противном случае они содержат непредсказуемые значения. При инициализации указателям присваивается значение нуль(NULL) или конкретный адрес. Адрес указателю можно присвоить с помощью операции адреса (&). Разыменование указателя выполняется с помощью операции разыменования (*). Доступ к отдельному public -элементу объекта можно получить напрямую, используя операцию точка (.), или через указатель на этот объект – в этом случае необходимо использовать операциюстрелка (–>). // Пример 13.1. Объявление и использование указателя на объект класса. #include <iostream> using namespace std; class Samp { int x; public: int y; void setx(int n){x = n;} void show(); }; void Samp::show(){ cout<<" x = "<<x<<" y = "<<y<<endl; } int main() { Samp ob, *p; // создание объекта ob и указателя p ob.setx(1); // прямой доступ к членам объекта ob ob.y = 1; ob.show(); // x = 1 y = 1 p = &ob; // присваивание p адреса объекта ob p->setx(5); // вызов функции через указатель p p->y = 5; p->show(); // x = 5 y = 5 (*p).y = 55; p->show(); // x = 5 y = 55 } В данном примере выражение (*p) разыменовывает указатель, разрешая доступ к содержимому ячейки памяти по адресу, хранящемуся в p.
Дата добавления: 2015-06-25; Просмотров: 329; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |