ООП в С++ – классы и объекты
Для создания класса в С++ необходимо указать служебное слово class, после указывается имя класса, обычно с большой буквы, потом фигурные скобки. В фигурных скобках описывается тело класса.
Класс - это пользовательский тип данных.
Класс содержит переменные (свойства класса или поля класса) и функции (методы класса). Свойства и методы - являются членами класса.
Модификаторы доступа
- public — доступ открыт всем, кто видит определение данного класса. Доступ разрешён к данным класса извне.
- protected — доступ в классе и производным от данного класса. Производные классы (потомки) получают свободный доступ к таким свойствам или метода. Все другие классы такого доступа не имеют.
- private — доступ открыт ТОЛЬКО самому классу (т.е. функциям-членам данного класса) и друзьям (friend) данного класса - как функциям, так и классам. Однако производные классы (потомки) НЕ получают доступа к этим данным совсем. И все другие классы такого доступа не имеют.
Если отсутствует модификатор, то все функции и переменные, по умолчанию являются закрытыми, но лучше определять модификатор всегда.
#include <iostream>//Подключаем cin и cout и др.
#include <string>//Строки
using namespace std;//Пространство имен
class Gena//КЛАСС
{
public://Доступ всем
string name="Маша";//Свойство
Gena(string name)//Конструктор
{
cout << name << " и " << this->name << endl;
}
void f()//Метод
{
cout << "Функция f()" << endl;
}
~Gena()//Деструктор
{
cout << "Пока!" << endl;
}
protected://Доступ ТОЛЬКО из класса
private://Доступ из класса и потомков
};
int main()
{
setlocale (LC_ALL, "rus");//Кириллица
Gena G1("Гена");//Создание объекта G1 класса + аргумент в конструктор
G1.f();//Метод класса через объект G1
Gena G2("Ната");//Создание объекта G2 класса + аргумент в конструктор
//class Gena G1("Гена");//Или так:
//class Gena G1("Гена"), G2("Ната");//А можно и оба сразу
//system("pause");//Команда задержки экрана - комментируем, т.к. не сраб. ДЕСТРУКТОР
return 0;
}
Конструктор и Деструктор
Конструктор класса - это метод (функция), который имеет ОДИНАКОВОЕ ИМЯ с классом и автоматически вызывается при создании объекта класса. Конструктор (как правило) должен быть public и в него можно передать аргументы, как в обычную функцию.
Конструктор используют для определения начальных данных класса.
Деструктор класса - это метод (функция), который имеет ОДИНАКОВОЕ ~ИМЯ с классом и впереди тильда(~) и автоматически вызывается при отработки объекта класса. Деструктор (как правило) должен быть public и в него НЕЛЬЗЯ передать аргументы, как в обычную функцию.
Деструктор используют для освобождения занятой памяти.
Создание объекта: ИмяКласса имяОбъекта; Ингода в начале указывается служебное слово class.
...
Gena G1("Гена");//Создание объекта G1 класса + аргумент в конструктор
//class Gena G1("Гена");//Создание объекта G1 класса + аргумент в конструктор
//class Gena G1("Гена"), G2("Ната");//А можно и оба сразу
...
Создать объект можно и сразу:
...
class NameClass
{
//тело класса
}, nameObjecta;//Создаём объект сразу!
...
Перегрузка конструктора
Перегрузка конструктора - очень похожа на перегрузку функции. Перегрузка конструктора в С++ – это подмена конструктора в зависимости от количества аргументов и их типов. Можно использовать два или больше конструктора с разными аргументами:
- по количеству
- по типу
- но НЕ типу return
Указатель this
Указатель this указывает на адрес созданного объекта класса - является скрытым первым параметром любого метода-элемента класса. Но this можно указывать и явно: this->свойство или this->метод(). Используют в том числе если свойства класса и аргументы метода совпадают по именам.
...
Gena(string name)//Конструктор
{
cout << name << " и " << this->name << endl;//name - аргумент метода; this->name - свойство класса;
}
...