Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 12 Классы_Объекты_Массивы объектов 2015.doc
Скачиваний:
65
Добавлен:
29.02.2016
Размер:
110.59 Кб
Скачать

Локальные и глобальные объекты

Объект, объявленный внутри блока или функции, является локальным объектом. Для него область видимости (та часть в программе, где объект доступен) и время жизни (время, в течение которого, объект хранит своё значение) – функция или блок, где данный объект определён.

Объект, объявленный вне любого блока и вне любой функции, является глобальным объектом. Для такого объекта область видимости и время жизнився программа, в которой он определён, кроме того блока или функции, где данный объект переопределён.

Присваивание объектов

Для присваивания одного объекта другому объекту используется операция присваивания (=). Объекты после выполнения операции присваивания приобретают одинаковые значения данных, оставаясь при этом независимыми.

Присваивать можно лишь объекты одного типа (т.е. с одним именем типа), а не типов, одинаковых физически.

// Пример 12.2. Присваивание объектов.

#include <iostream>

using namespace std;

class myClass{ // определение класса myClass

int a, b;

public:

void set(int n, int m){a = n; b = m;}

void show(){cout<<a<<' ' <<b<<endl;}

};

class yourClass{ // определение класса yourClass

int a, b;

public:

void set(int n, int m){a = n; b = m;}

void show() {cout<<a<<' ' <<b<<endl;}

};

int main(){

myClass ob1, ob2; yourClass ob3;

ob1.set(5, 6); ob2 = ob1; // ошибки нет, объекты одного типа

// ob3 = ob1; // ошибка, объекты разных типов

system("pause");

}

Конструкторы и деструкторы

В языке С++ нельзя инициализировать объект тем же способом, что и встроенные типы, например, intилиfloat, поэтому была создана специальная функция класса, называемая конструктором.

Конструкторэто специальная функция класса, которая вызывается автоматически при создании объекта и предназначена для его инициализации. Конструктор должен иметь то же имя, что и класс (чтобы компилятор смог её определить).

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

Основные правила использования конструктора:

  • конструктор не может возвращать значение, даже типа void;

  • конструктор должен быть открытым членом класса;

  • класс может иметь несколько конструкторов с разными параметрами для разных видовинициализации;

  • параметры конструктора могут иметь любой тип (кроме типа этого же класса), могут быть заданы как аргументы по умолчанию,но их может содержать только один из конструкторов.

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

Основные правила использования деструктора:

  • имя деструктора начинается cсимволатильды(~), непосредственно за которым следует имя класса;

  • деструктор не может иметь параметров, не может возвращать значение;

  • нельзя перегружать деструктор;

Класс должен иметь только один деструктор или ни одного, в этом случае он создаётся компилятором как пустая функция (без параметров и с пустым телом).

Деструктор класса автоматически вызывается при удалении объекта. Локальные объекты удаляются, если они выходят из области видимости, например, при выходе из функции.Глобальные объекты удаляютсяпри завершении программы. Использовать деструктор имеет смысл при работе с динамической памятью.

// Пример 12.3. Использование конструктора и деструктора.

#include <iostream>

using namespace std;

class Samp{ // определение класса Samp

int a;

public:

Samp(){a = 0;} // конструктор

void show(){cout<<"a = "<<a<<endl;} // функция show()

~Samp(){cout<<"Destructor"<<endl;} // деструктор

};

int main(){

Samp ob; // создание объекта ob, вызов конструктора

ob.show(); // a = 0

system("pause");

}