КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Создание объекта связано с выделением под него памяти. При объявлении же класса память не выделяется.После того как объекты созданы, можно обращаться к открытым членам класса. Как и при работе со структурами, обращение к открытым членам класса производится через точку “.”. В следующем фрагменте показано обращение к функциям- членам класса myclass. obj1.set_a(10); // обращение к функции set_a( ) первого объекта obj2.set_a(22); // обращение к функции set_a( ) второго объекта cout<<obj1.get_a( )<<’\t’; //обращение к функции get_a( ) первого объекта cout<<obj2.get_a( )<<’\n’;//обращение к функции get_a( ) второго объекта Функции set_a( ) первого объекта в качестве аргумента передаётся численное значение 10, которое присваивается переменной а этого объекта. Аналогично, переменной а второго объекта присваивается значение 22. Каждый объект имеет свою переменную а, свою функцию set_a( ) и функцию get_a( ). Поэтому объекты еще называют экземплярами классов. В третьей строке фрагмента на экран выводится значение функции get_a( ) первого объекта, а в четвертой – второго объекта. После выполнения указанных операций на экране будет: 10 22.
Объекты– это переменные, и они имеют те же возможности и признаки, что и переменные любых других типов. Поэтому объекты могут объединяться в массивы. Синтаксис объявления массива объектов совершенно аналогичен тому, который используется для объявления массива переменных любого другого типа. То же касается и доступа к элементам массива. Пример с массивом объектов. #include<iostream.h> class one // имя класса { int a; // закрытая переменная public: void set_a(int n) {a=n;} // функция доступа к закрытой переменной int get_a( ) {return a;} // функция доступа к закрытой переменной }; void main( ) // главная функция { one obj[4]; // создание массива из 4-х объектов int i; for(i=0; i<4; i++) // инициализация переменных объектов obj[i].set_a(i); for(i=0;i<4;i++) // вывод значений переменных объектов cout<<obj[i].get_a()<<' '; } В данном примере объявлен класс one, в котором имеется закрытая переменная и две функции доступа к ней. В главной функции создан массив из 4-х объектов, в котором циклической операцией производится инициализация закрытой переменной каждого элемента массива с помощью функции set_a( ). Во второй циклической операции производится вывод на экран значения переменной каждого объекта путем использования функции get_a( ).
3. Доступ к членам классов.
Существует три вида спецификаторов, public,private и protected. Если перед свойством не стоит спецификатор, то по умолчанию (при наследовании классов) он является как private, что означает скрытый. Если же наследуется не класс, а структура struct, то свойство является общедоступным public. С двумя спецификаторами мы уже кратко познакомились, теперь давайте полностью ознакомимся со всеми тремя: · private — закрытый, то есть к нему можно обращаться только в текущем классе. · protected — защищенный, разрешено обращаться как с текущего класса так и с классов наследников. · public — общедоступный, разрешено обращаться из любого места программы.
4. Конструкторы. Назначение и технология использования. Конструктор является спец. типом процедуры. Каждый тип объекта должен иметь конструктор. Конструктор должен вызываться перед вызовом любого виртуального метода. Вызов виртуального метода без вызова конструктора может привести к блокированию системы. Главная задача конструктора заключается в том, что он устанавливает связь между вызывающим его экземпляром объекта и ТВМ этого объекта.
Поскольку такая функция конструирует значения данного типа, она называется конструктором. Конструктор распознается по тому, что имеет то же имя, что и сам класс. Конструкторы могут иметь параметры, что позволяет определить начальное состояние объекта при его порождении. Конструкторы имеют то же имя, что и имя класса, в котором они определены, так что если класс имеет несколько конструкторов, то они должны различаться числом и типом своих параметров. Например: class date { date(int, int, int); };
Когда класс имеет конструктор, все объекты этого класса будут инициализироваться. Если для конструктора нужны параметры, они должны даваться:
date today = date(23,6,1983); date xmas(25,12,0); // сокращенная форма (xmas - рождество) date my_burthday; // недопустимо, опущена инициализация
Часто необходимо обеспечить несколько способов инициализации объекта класса. Это можно сделать, задав несколько конструкторов. Конструктор без параметров (по умолчанию). Один из способов сократить число родственных функций - использовать параметры по умолчанию. Основные свойства и правила использования конструкторов:
· конструктор имеет то же имя, что и класс, в котором он объявляется; · конструктор не возвращает значения даже типа void; · конструктор не наследуется в производных классах. Если необходимо, то конструктор производного класса может вызвать конструкторы для его базовых классов; · конструктор может иметь аргументы, заданные по умолчанию; · конструктор - это функция, но он не может быть виртуальным, его нельзя объявить виртуальным; · невозможно получить в программе адрес конструктора (указатель на конструктор); · Если конструктор не задан в программе, то он будет автоматически сгенерирован компилятором для построения соответствующих объектов. Все конструкторы сгенерированные компилятором, имеют атрибут public; · Конструктор по умолчанию для класса Х - это конструктор, который может быть вызван без аргументов; · Конструктор вызывается автоматически только при описании объекта; · Объект, содержащий конструктор, нельзя включить в виде компонента в объединение (union); · Конструктор класса Х не может иметь аргумент типа Х; · Конструктор, заданный в виде Х::X(const X &), называется конструктором для копирования (copy constructor) класса Х;
5. Деструкторы. Назначение и использование.
Когда объект уничтожается при завершении программы или при выходе из области действия определения соответствующего класса, необходимы противоположные операции, самая важная из которых - освобождение памяти. Эти операции могут и должны выполняться по-разному в зависимости от особенностей конкретного класса. Поэтому в определении класса явно или по умолчанию включают специальную принадлежащую классу функцию - деструктор. Деструктор имеет строго фиксированное имя вида:
|