Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Создание объекта связано с выделением под него памяти. При объявлении же класса память не выделяется.




После того как объекты созданы, можно обращаться к открытым членам класса. Как и при работе со структурами, обращение к открытым членам класса производится через точку “.”. В следующем фрагменте показано обращение к функциям- членам класса 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. Деструкторы. Назначение и использование.

 

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


Поделиться:

Дата добавления: 2015-01-19; просмотров: 69; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты