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

Инициализация

Доступ к членам класса | Конструкторы и деструкторы | Конструктора); | Деструктор- это функция, которая автоматически выполняется, когда экземпляр класса уничтожается. | Имя объекта. имя компонента | Параметров) | Друзья классов | StrokaZ; |


Читайте также:
  1. Инициализация рабочих мест

Определение класса

 

Ключ класса <имя класса> // заголовок класса

{ список компонентов класса}; // тело класса

 

Определение класса (,как и структуры,) всегда заканчивается ‘; ‘

Ключ класса – одно из слов class, struct, union;

имя класса – правильный идентификатор;

список компонентов (или членов класса -member) – определения и описания типизированных данных и принадлежащих классу функций.

 

Членами класса в общем случае могут быть данные, функции, классы, перечисления, битовые поля, дружественные функции, дружественные классы и имена типов.

 

Функции – члены класса(member functions), называют методами класса или компонентными функциями.

Данные класса (data members), называют компонентными данными или элементами данных (объектов) класса

 

Список членов класса, заключенный в фигурные скобки, называется телом класса, ему предшествует заголовок класса.

 

При объявлении соответствующих функций имеется выбор: можно определить функцию непосредственно в теле класса или вне класса

 

Примеры 1.

Struct book { char title [256];

char author[40];

Float price;

void show_title (void) { cout<<title<<”\n”; };

float get_price (void) {return (price); };

};

2.

// в теле класса присутствует прототип функции

// определение функции после определения класса

struct book1 { char title[256];

void show_title(char*title);

};

void book1::show_title(char*title)

{ cout << title; }

<тип> < имя класса >::

<имя функции> (спецификация формальных параметров)

{ тело принадлежащей классу функции}

:: -операция принадлежности функции классу

Имя book1::show_title (имя класса:: имя функции) называется полным или квалифицированным именем функции – члена класса

Класс, как и структура, описывает тип, шаблон для будущих объявление переменных, память при объявлении класса не выделяется.

Класс – это тип, который служит для определения объектов класса

 

Определение объекта (экземпляра) класса:

 

Создание объектов или экземпляров класса осуществляется также как создание структурных переменных.

Создание экземпляра по имени – статическое выделение памяти:

<имя класса ><имя объекта>

book tip1, tip2, tips[ 5 ], * ptr =&tip1, &name = tip2;

// объявлены объекты tip1 и tip2, объявлен массив объектов tips,

//объявлен указатель на объект ptr, инициированный адресом первого объекта

// объявлена ссылка на объект tp2

// (все - класса book)

Создание экземпляра с помощью указателя и динамического выделения памяти:

<имя класса >*<имя указателя на объект > = new (<имя класса >)

 

book * pb = new book;

 

Инициализация

book1 tip2 ={“Язык С++”}; - // объявление объекта класса book1 с

// инициализацией

 

Можно сразу объявлять объекты при объявлении класса, поместив имя объекта (или имена объектов) после закрывающей фигурной скобки.

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

Как только объект определен, можно обращаться к его компонентам

Обращение к компонентам объекта

Используя имя объекта:

1) С помощью квалифицированных имен:

<имя объекта>. <имя класса>:: <имя компонента>

<имя объекта>. <имя класса>:: <вызов компонентной функции >

2) С помощью уточненного имени:

< имя объекта>. <имя компонента>

Можно присваивать значения, вводить, выводить.

 

cin>>tip1.title;

strcpy (tip1.title, “Турбо Паскаль”);

cin >> tips[3].author; cout<<tips[3].price;

Вызов компонентной функции, используя уточненное имя:

 

<имя объекта >. <вызов компонентной функции>

 

Компонентная функция объекта обрабатывает данные того же объекта

tip2. show_title ()- такой вызов приведет к печати – Язык С++

3) Обращение с помощью указателя на объект класса и операции косвенного

выбора элемента (‘->’):

 

<указатель на объект класса> -> <имя компонента>

book X1, X2, X3, * ptr = & X3

// объявлено три объекта класса book и указатель на объект класса, //инициированный адресом третьего объекта

strcpy(ptr ->title, “ Turbo Pascal”);// даст значения элементу объекта X3

cin >> pb->title;

Вызов компонентной функции, с использованием указателя:

 

указатель на объект класса -> вызов компонентной функции

ptr -> show_title(); // выведет “ Turbo Pascal”

pb ->show_title();

 

При объявлении функции вне класса, внутри тела класса помещается только прототип или описание функции- заголовок функции с указанием типов формальных параметров, оканчивающийся знаком ‘; ‘.

Все экземпляры класса будут использовать один код функции, и компилятор будет генерировать код для вызова функции при каждом обращении к функции.

Например класс имеет три метода(функции), определенных вне класса и сто экземпляров класса, то в программе присутствуют 100 экземпляров данных, но коды только трех функций.

Данные тиражируются при создании объектов.

Компонентные функции не тиражируются.

 

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

“ встраивается“ в точку вызова. Это, так называемые, inline- функции, компилятор помещает в объектном коде тело функции везде, где есть к ней обращение.

Вместо команд передачи управления единственному экземпляру тела функции компилятор в каждое место вызова функции помещает команды кода операторов тела функции.

Это может увеличить скорость выполнения программы, но увеличивает также размер кода программы. Если метод (функция) большой по объему, не следует настраивать компилятор на генерацию встроенного кода и следует объявить функцию вне класса.

 

Функция, определенная вне класса, будь это функция – член класса или любая другая функция, также может быть подставляемой, если при ее определении используется модификатор inline

inline int ff (void) {... } //- обычная функция

 

class Men { char * name;

void setName (char*); // -функция член класса

};

inline void Men:: setName (char*n)

{ name = n;}

Удобно использовать inline - функцию, если функция маленькая, возрастает скорость выполнения программы, и не сильно возрастает размер кода программы при многократном встраивании в него кода операторов функции.

Ограничения и запреты для подставляемых функций:

1) встраиваемая функция слишком велика;

2) встраиваемая функция рекурсивная;

3) обращение к встраиваемой функции размещено до ее определения;

4) встраиваемая функция используется более одного раза в выражении;

5) встраиваемая функция содержит операторы for, while, do, switch, goto.

Статический компонент класса


Дата добавления: 2015-07-20; просмотров: 64 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
B) Остаточные напряжения| Такой элемент должен быть определен в классе как статический.

mybiblioteka.su - 2015-2024 год. (0.012 сек.)