Определение классов
Кроме использования встроенных типов, таких как int, double и т.д., мы можем определять свои собственные типы или классы. Класс представляет составной тип, который может использовать другие типы.
Класс предназначен для описания некоторого типа объектов. То есть по сути класс является планом объекта. А объект представляет конкретное воплощение класса, его реализацию.
Класс может определять переменные и константы для хранения состояния объекта и функции для определения поведения объекта.
Например, определим простейший класс:
1
2
3
4
class Person
{
};
Для определения класса применяется ключевое слово class, после которого идет собственно название класса. В данном случае класс называется Person и представляет человека. После названия класса идет блок кода, который определяет тело класса.
После определения класса мы можем создавать его переменные:
1
2
3
4
5
6
7
8
9
class Person
{
};
int main()
{
Person person;
return 0;
}
Но данный класс мало что делает. Теперь изменим его:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
class Person
{
public:
string name;
int age;
void move() {
cout << name << " is moving"<< endl;
}
};
int main()
{
Person person;
person.name = "Tom";
person.age = 22;
cout << "Name: " << person.name << "\tAge: " << person.age << endl;
person.move();
return 0;
}
Теперь класс Person имеет две переменных name и age, которые предназначены для хранения имени и возраста человека соответственно. Также класс определяет функцию move, которая выводит строку на консоль. Также стоит обратить внимание на модификатор доступа public:, который указывает, что идущие после него переменные и функции будут доступны извне, из внешнего кода.
Затем в функции main создается один объект класса Person. Через точку мы можем обратиться к его переменным и функциям. Например, через выражение
1
person.name = "Tom";
Можно передать значение переменной name. А с помощью выражения
1
string personName = person.name;
Получить это значение в какую-нибуь переменную. Ну и также мы можем вызывать функции у объекта:
1
person.move();
Консольный вывод данной программы:
Name: Tom Age: 22
Tom is moving
Указатели на объекты классов
На объекты классов, как и на объекты других типов, можно определять указатели. Затем через указатель можно обращаться к членам класса - переменным и методам. Однако если при обращении через обычную переменную используется символ точка, то для для обащения к членам класса через указатель применяется стрелка (->):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
class Person
{
public:
string name;
int age;
void move() {
cout << name << " is moving" << endl;
}
};
int main()
{
Person person;
Person *ptr = &person;
ptr->name = "Tom";
ptr->age = 22;
ptr->move();
cout << "Name: " << ptr->name << "\tAge: " << ptr->age << endl;
cout << "Name: " << person.name << "\tAge: " << person.age << endl;
return 0;
}
Изменения по указателю ptr в данном случае приведут к изменениям объекта person.