-
На основе класса в программе создаются экземпляры этого класса (объекты).
-
В зависимости от способа создания объекта (выделения памяти под объект) объекты могут быть статическими и динамическими.
-
Под статические объекты память отводит компилятор в стеке или глобальной области памяти, а под динамические объекты – программист с использованием операции динамического выделения памяти (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;
-
}