Skip to content

Commit 64b7f85

Browse files
committed
Add structures module
1 parent 220de79 commit 64b7f85

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

include/15_structures.hpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#pragma once
2+
3+
#include <iostream>
4+
5+
namespace classwork {
6+
7+
struct Student {
8+
public:
9+
// конструктор по-умолчанию (без аргументов)
10+
Student() {
11+
id_ = 0;
12+
age_ = 0;
13+
14+
// выделили память в куче (не забыть высвободить)
15+
pointer_ = new int{0};
16+
17+
std::cout << "Student()\n";
18+
}
19+
20+
// "объявление" конструктора от 2 аргументов
21+
Student(int id, int age);
22+
23+
// деструктор
24+
~Student() {
25+
delete pointer_;
26+
pointer_ = nullptr;
27+
28+
std::cout << "~Student()\n";
29+
}
30+
31+
// getter - метод, который возвращает копию значения поля id
32+
int id() const {
33+
return id_;
34+
}
35+
36+
// setter - метод, который изменяет значение поля id
37+
void SetId(int new_id) {
38+
private_function(); // вызов приватной функции возможен внутри структуры
39+
id_ = new_id;
40+
}
41+
42+
private:
43+
// приватные переменные принято называть с суффиксом _
44+
int id_;
45+
int age_;
46+
47+
int* pointer_;
48+
49+
// приватные методы
50+
void private_function() {
51+
std::cout << "Student::private_function()\n";
52+
}
53+
};
54+
55+
} // namespace classwork

src/15_structures.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <iostream>
2+
3+
// Подключаем свой заголовочный файл (он находится в папке include).
4+
#include "15_structures.hpp"
5+
6+
// Заголовочные файлы хранят в себе функции, структуры и т.д., которые можно использовать.
7+
8+
using namespace classwork; // чтобы постоянно не дописывать в названиях 'classwork::'
9+
10+
int main() {
11+
12+
{
13+
// 1. Создание объекта структуры на стеке.
14+
15+
Student student; // вызывается конструктор по-умолчанию
16+
17+
// вызов метода через оператор . (точка)
18+
student.SetId(1);
19+
20+
std::cout << "Id: " << student.id() << "\n";
21+
}
22+
23+
std::cout << std::endl;
24+
25+
{
26+
// 2. Создание объекта структуры на куче.
27+
28+
// выделяем участок памяти при помощи оператора new
29+
auto* student_heap = new Student(1, 19);
30+
31+
// Пояснение: auto - ключевое слово, которое позволяет не писать тип данных слева от знака равно.
32+
33+
// вызов метода через оператор -> (стрелка)
34+
student_heap->SetId(2);
35+
36+
// Пояснение: оператор -> используется для указателей.
37+
38+
std::cout << "Id: " << student_heap->id() << '\n';
39+
40+
delete student_heap; // высвобождаем участок памяти
41+
}
42+
43+
return 0;
44+
}
45+
46+
// "определение" конструктора от 2 аргументов из файла 15_structures.hpp
47+
classwork::Student::Student(int id, int age) {
48+
id_ = id;
49+
age_ = age;
50+
pointer_ = nullptr;
51+
52+
std::cout << "Student(id, age)\n";
53+
}

0 commit comments

Comments
 (0)