Классы: конструктор, деструктор, методы класса - IsuiGit/borodaedu GitHub Wiki
Что такое класс?
Класс - шаблон построения объектов на основе заранее заданных параметров, с предоставлением готовых к выполнению функций, полей данных и т.д.
// Базовая реализация класса на C++
class ClassName{
// компоненты класса (поля и методы)
};
Класс предназначен для описания некоторого типа объектов. По сути класс - шаблон объекта на основе которого проектируются дальнейшие экземпляры или объекты класса.
Объекты или экземпляры
Объектом (или экземпляром) называют конкретное воплощение класса в виде переменной.
class Person{ // <- это класс (прототип будущих объектов)
public:
std::string name;
int age;
};
int main(){
Person p; // <- это объект (или экземпляр) класса
std::cout << p.name << std::endl;
std::cout << p.age << std::endl;
}
В момент создания переменной p типа Person в памяти создается ячейка, куда записываются (помимо информации о самом объекте) функции и поля, описанные в классе экземпляра.
Конструктор
Конструктор - обязательный (имеется по умолчанию у любого класса) метод, принадлежащий классу и принимающий набор аргументов (либо пустой набор) необходимый для экземпляра класса.
class Person{ // <- это класс (прототип будущих объектов)
public:
Person(std::string init_name, int init_age){ // <- конструктор класса Person, принимающий аргументы init_name (любая строка), init_age (любое целое число)
name = init_name;
age = init_age;
}
Person(){ // <- конструктор по умолчанию (базовый) без обработки аргументов. Если вы создали собственный конструктор класса, то хорошим тоном будет воссоздать (или сделать свой) конструктор по умолчанию, для тех случаев, когда объект будет конструироваться без передачи данных.
name = "";
age = 0;
}
std::string name;
int age;
};
int main(){
Person p1; // <- это объект (или экземпляр) класса построенный конструктором по умолчанию
std::cout << p1.name << std::endl;
std::cout << p1.age << std::endl;
Person p2("John", 25); // <- это объект (или экземпляр) класса построенный с помощью собственного конструктора
std::cout << p2.name << std::endl;
std::cout << p2.age << std::endl;
}
- Конструктор может быть не только собственным, но и основан на принципе наследования или инструкций копирования других классов ([Конструктор наследования]] ](/IsuiGit/borodaedu/wiki/[[Конструктор-копирования))
- Конструктор может иметь особую форму записи с инициализацией данных до момента вызова основных инструкций конструктора
...
Person() {name = ""; age = 0;} // <=> Person(): name(""), age(0) {//основные инструкции конструктора}
Person(std::string init_name, int init_age){name = init_name; age = init_age;} // <=> Person(std::string init_name, int init_age): name(init_name), age(init_age){//основные инструкции конструктора}
...
Деструктор
Деструктор - собственный метод принадлежащий любому классу, вызываемый в момент удаления объекта из памяти (вручную или автоматически).
class Person{ // <- это класс (прототип будущих объектов)
public:
Person(std::string init_name, int init_age){
name = init_name;
age = init_age;
}
Person(){
name = "";
age = 0;
}
~Person(){ // <- это деструктор, и он безусловно срабатывает в момент удаления объекта из памяти программы
std::cout << "Destructor delet object: " << name << std::endl;
}
std::string name;
int age;
};
int main(){
{ // <- фигурные скобки создают отдельный участок кода и сужают область видимости, за счет чего объект будет удален из памяти после выхода за фигурные скобки
Person dest_p("Sam", 19); // <- создаем новый объект
std::cout << dest_p.name << std::endl; // <- выводим поле имя объекта в консоль
std::cout << dest_p.age << std::endl; // <- выводим поле возраст в консоль
} // <- в этой точке программа теряет объект dest_p из области видимости и удаляет его, поэтому в консоли перед выводом информации об объекте p2, вы увидите информацию из деструктора об удалении объекта
Person p2("John", 25);
std::cout << p2.name << std::endl;
std::cout << p2.age << std::endl;
}
Приватность классов
Приватность (области видимости) - специальные директивы языка C++, позволяющие ограничивать доступ к полям и методам класса (и его экземплярам) с целью соблюдения принципа инкапсуляции и не нарушения прав доступа к данным.
class Person{ // <- это класс (прототип будущих объектов)
public: // <- приватность типа public позволяет обращаться к методам и полям в любой точке кода и из любого другого класса или объекта
Person(std::string init_name, int init_age){
...
}
Person(){
...
}
~Person(){
...
}
private: // <- приватность типа private допускает обращение к полям и методам класса только изнутри него самого
void delete_name(){
...
}
std::string name;
int age;
};
int main(){
Person p("John", 25);
std::cout << p.name << std::endl;
std::cout << p.age << std::endl;
}
Summary
- Класс - шаблон (прототип) построения экземпляров (объектов) класса.
- Объект - конкретное воплощение построенное на основе класса.
- Конструктор - специальный метод, принадлежащий любому классу и безусловно реализующий добавление значений в поля класса в момент построения объекта.
- Деструктор - специальный метод, принадлежащий любому классу и безусловно реализующий описанные в нем инструкции в момент удаления объекта из памяти.
[sitemap]] ](/IsuiGit/borodaedu/wiki/[[C)++