Указатель_на_объект –> имя_компонента
Имя_объекта.имя_данного
Имя_объекта.имя_функции
Пример 6.
voidmain()
{
AnyClass obA, оbB;// создание двух объектов
obA.SetX(1);// изменение значение данного-члена x в объекте obA
obB.SetX(3);// изменение значение данного-члена x в объекте obB
}
После того, как объект класса создан, можно обращаться к открытым членам класса, используя операцию "точка", так же как к полям структуры.
Эти операторы устанавливают значения переменной x в объектах obAи оbB. Каждый объект содержит собственную копию всех данных, объявленных в классе. Это значит, что значение переменной xв obAотлично от значения этой переменной в оbB.
Пример 7.
voidmain()
{
complex x1, x2;
x1.set(1.8, 3.2);
x2.set(5.1, 1.7);
x1.print();
x2.print();
}
Использование указателя на объект
Второй способ доступа использует указатель на объект
указатель_на_объект –> имя_компонента
Доступ к элементам данных класса можно получить с помощью указателя на объект этого класса. Следующий пример это иллюстрирует.
Пример 8.
void main()
{
AnyClass A; // создание объекта
AnyClass *pA=&A; // создание указателя на объект класса AnyClass
// и его инициализация адресом переменной A
pA -> SetX(1); // изменение значение данного-члена x в объекте A
A.SetX(5);
}
Какой же метод доступа к членам класса работает быстрее? "Точка" работает в точности так же, как оператор "->", за исключением того, что имени объекта предшествует неявно сгенерированный компилятором оператор адреса "&". Таким образом, инструкцию ObjName.FuncName();
компилятор трактует, как (&ObjName) -> FuncName();
Пример 9.
void main()
{
complex *point = new complex;
point –>set(1.24, 2.3);// изменение значений данных-членов x и y
// в объекте, на который указывает point
point –>print();
delete point; // удаление объекта из кучи
}
В первой строке тела функции выполняются следующие действия:
§ объявляется указатель point на объект класса complex,
§ выделяется память для объекта класса complex в куче,
§ создаётся объект класса complex,
§ указатель инициализируется адресом выделенной памяти.
!!!Доступ к членам-данным возможен, если они объявлены как общедоступные. В ООП обычно не допускается прямой доступ к данным, это осуществляется через соответствующие функции.
Неполное объявление класса
Класс должен быть объявлен до использования его членов. Однако иногда в классе должен быть объявлен указатель или ссылка на объект другого класса еще до того, как он определен. В этом случае приходится прибегать к неполному объявлению класса, которое имеет вид:
class <имя_класса>;
Рассмотрим пример.
classPrevDecl;// неполное объявление класса PrevDecl
classAnyClass
{
int x;
PrevDecl*obPtr;
public:
void Set(int X)// метод класса AnyClass
{
x=X;
}
};
classPrevDecl// полное объявление класса PrevDecl
{
int y;
public:
void print();// метод класса PrevDecl
};
Нельзя создать объект не полностью определенного класса. Попытка создания такого класса приводит к ошибке компиляции.
Создание класса в среде разработки
Класс, который мы создали можно разместить в том же файле, что и основная программа, которая содержит функцию main()и использует этот класс. Но такое решение целесообразно только в том случае, если ваша программа невелика по объёму. Хорошим стилем программирования считается размещение каждого класса в отдельном файле и дальнейшее подключение его к основной программе с помощью директивы #include.
Более того, синтаксис языка C++ предполагает размещение класса в двух файлах – в заголовочном файле c расширением *.hи в связанном с ним исполняемым файлом с расширением *.cpp. Оба файла должны иметь одно и то же имя. Как правило, это имя совпадает с именем класса. В заголовочном файле размещают объявление класса, а в исполняемом файле – описание функций-членов класса. Кроме того, необходимо позаботится о связи файлов, и предотвратить возможность повторного включения класса в код программы при компиляции.
Теперь мы можем дополнять класс объявлениями новых данных-членов и функций-членов в файле <имя>.h. Реализация функций-членов мы будем помещать в файл <имя>.cpp. Для того, чтобы использовать класс, его нужно подключить к файлу, в котором мы хотим создать объекты типа <имя> с помощью директивы:
#include "<имя>.h"
Имя файла заключено в двойные кавычки. Это означает, что компилятор должен искать файл в папке проекта.