- 
На основе класса в программе создаются экземпляры этого класса (объекты).
- 
В зависимости от способа создания  объекта (выделения памяти под объект) объекты могут быть статическими и динамическими.
- 
Под статические объекты память отводит компилятор в стеке или глобальной области памяти, а под динамические объекты – программист с использованием операции динамического выделения памяти (new). Память под динамические объекты отводится в динамической области памяти (куче, heap).
- 
Если поля и методы объявлены в секции public, то к ним разрешен доступ  за пределами класса любым функциям программы с использованием имени объекта и операций точка или стрелка ( точка – используется для статических объектов, а стрелка – для динамических объектов).
- 
Для доступа за пределами класса к значениям закрытых полей данных (объявленных в секции private) используют public методы доступа:
- 
методы записи (изменения значения поля). Имена этих методов рекомендуют начинать с set;
- 
методы чтения (получения значения поля). Имена этих методов рекомендуют начинать с get;
 
- 
При создании объекта класса, пространство в памяти отводится только под поля объекта.  Для методов память при создании объекта не резервируется. Каждый метод класса существует в памяти в единственном экземпляре и может работать с полями данных каждого объекта  класса. Для этого каждый метод класса, кроме статических методов, (методов объявленных в классе с ключевым словом static) имеет скрытый параметр – указатель this, в который передается адрес объекта, который вызывает метод. Указатель this неявно применяется для доступа к полям объекта из методов  объекта. Но при желании можно явно применить указатель this для доступа к полям объекта из методов  объекта, особенно если параметры метода совпадают по именам с полями объекта.
25.11.2016
17
- 
Пример 2. Создание объектов класса Cat. Доступ к полям и методам
- 
// main.cpp
- 
#include "cat.h"
- 
int main()
- 
{ Cat Cat1; //статический объект, вызывается
- 
// конструктор без параметров
- 
Cat Cat2("Murzik",3); //статический объект,
- 
// вызывается конструктор c параметрами
- 
Cat* Cat3 = new Cat; //динамический объект
- 
Cat* Cat4 = new Cat("Pushok",4); //динамический объект
- 
Cat1.Meow(); Cat2.Meow();
- 
Cat3->Meow(); Cat4->Meow();
- 
// Cat1.age = 5; Ошибка!!!
- 
Cat2.setAge(5);//Правильно!!!
- 
Cat4->setAge(6);
- 
cout << "\n" <<  "\n" ;
- 
Cat2.Meow();  Cat4->Meow();
- 
delete Cat3; delete Cat4;
- 
}
25.11.2016
18
- 
Состав проекта и пример выполнения программы примера 2:


25.11.2016
19
Способы создания массива объектов
 1. Cat Family1[5]; //статический массив объектов
                    // класса Cat -  для каждого //объекта вызывается конструктор без параметров
 2. Cat * Family2; 
    Family2 = new Cat[5]; //динамический массив
         // объектов класса Cat - для каждого объекта
         // вызывается конструктор без параметров
 3. Cat * Family3[5]; //массив указателей на объекты
                      // класса Cat
    
   for (int i=0; i < 5; i++)
       Family3[i] = new Cat; 
25.11.2016
20
- 
Пример 3.
- 
// main.cpp
- 
#include "cat.h"
- 
#include <iostream>
- 
using namespace std;
- 
int main()
- 
{ Cat Family1[5]; // статический массив объектов
- 
for (int i=0; i < 5; i++)
- 
Family1[i].setAge(2*i+1);
- 
cout << " Возраст котов (в годах):";
- 
for (int i=0; i < 5; i++)
- 
cout << "\n Кот N "<< i+1 << " - " <<  Family1[i].getAge();
- 
}


25.11.2016
21
- 
Пример 4.
- 
// main.cpp
- 
#include "cat.h"
- 
#include <iostream>
- 
using namespace std;
- 
int main()
- 
{Cat* Family2 = new Cat[5]; // динамический массив объектов
- 
for (int i=0; i < 5; i++)
- 
Family2[i].setAge(2*i+2);
- 
cout << " Возраст котов (в годах):";
- 
for (int i=0; i < 5; i++)
- 
cout << "\n Кот N "<< i+1 << " - " <<  Family2[i].getAge();
- 
delete []Family2;
- 
}