- •Классы, Объекты и Методы
- •Struct DateStruct {
- •Int month;
- •Int year;
- •Методы классов
- •Void print () {
- •Int main () {
- •Int main () {
- •Int main () {
- •Спецификаторы доступа public и private
- •Int year; // открыто по умолчанию
- •Int main () {
- •Int main () {
- •Int main ()
- •Структуры. Классы
- •Инкапсуляция, Геттеры и Сеттеры Инкапсуляция
- •Int m_array[10];
- •Int main () {
- •IntArray array;
- •Void setValue(int index, int value) {
- •Функции доступа (геттеры и сеттеры)
- •Int m_month;
- •Int m_year;
- •Int main () {
- •Краткий обзор l-value и r-value
- •Инициализация ссылок
- •Ссылки в качестве параметров в функциях
- •Void changeN (int &ref) {
- •Int main () {
- •Int value1;
- •Int otherValue;
- •Ссылки. Указатели
- •Конструкторы
- •Int main () {
- •Конструкторы по умолчанию
- •Конструкторы с параметрами
- •Int m_numerator;
- •Int m_denominator;
- •Int getNumerator () {return m_numerator; }
- •Int getDenominator () {return m_denominator; }
- •Копирующая инициализация
- •Уменьшение количества конструкторов
- •Неявно генерируемый конструктор по умолчанию
- •Int main () {
- •Int main () {
- •Классы, содержащие другие классы
- •Int main() {
- •Список инициализации членов класса
- •Списки инициализации членов класса
- •Int m_value1;
- •Values() {
- •Int m_value1;
- •Инициализация массивов в классе
- •Инициализация переменных-членов, которые являются классами
- •Int main() {
- •Использование списков инициализации
- •Int m_value1;
- •Int m_value1;
- •Int m_value1;
- •Порядок выполнения в списке инициализации
- •Инициализация нестатических членов класса
- •Void print() {
- •Int main() {
- •Void print() {
- •Int main() {
- •Void print() {
- •Int main() {
- •Void print() {
- •Int main() {
- •Делегирующие конструкторы
- •Void DoX() {
- •Init();
- •Init();
- •Void Init()
- •Int main() {
- •Ещё о делегирующих конструкторах
- •Деструкторы
- •Имена деструкторов
- •Пример использования деструктора на практике
- •Выполнение конструкторов и деструкторов
- •Int getId() { return m_nId; }
- •Int main() {
- •Предупреждение о функции exit()
- •Скрытый указатель this
- •Скрытый указатель *this
- •Int m_number;
- •Int getNumber() { return m_number; }
- •Int main() {
- •Указатель this всегда указывает на текущий объект. Явное указание указателя this
- •Int data;
- •Цепочки методов класса
- •Заключение
Void print () {
std::cout << "name: " << m_name << "\nid: " << m_id <<
"\nwage: $" << m_wage << '\n';
}
};
Int main () {
// определяем двух работников
employee john {"john", 5, 30.00 };
employee max {"max", 6, 32.75 };
// выводим информацию о работниках на экран
john.print ();
std::cout<<std::endl;
max.print ();
return 0;
}
Результат выполнения программы:
name: John Id: 5 wage: $30
name: Max Id: 6 wage: $32.75
В отличие от обычных функций, порядок, в котором определены методы класса, не имеет значения!
Примечание о структурах в C++
В языке Cи структуры могут только хранить данные и не могут иметь связанных методов. После проектирования классов (используя ключевое слово class) в языке С++, Бьёрн Страуструп размышлял о том, нужно ли, чтобы структуры (которые были унаследованы из языка Си) имели связанные методы. После некоторых размышлений он решил, что нужно. Поэтому в программах, приведенных выше, мы также можем использовать ключевое слово struct, вместо class, и всё будет работать!
Заключение
Стандартная библиотека C++ полна классов, созданных для нашего удобства.
std::string, std::vector и std::array — это всё типы классов!
Поэтому, когда вы создаете объект любого из этих типов, вы создаете объект класса.
А когда вы вызываете функцию с использованием этих объектов, вы вызываете метод:
#include <string>
#include <array>
#include <vector>
#include <iostream>
Int main () {
std::string s {"Hello, world!" }; // создаем экземпляр класса string
std::array<int, 3> a {7, 8, 9 }; // создаем экземпляр класса array
std::vector<double> v {1.5, 2.6, 3.7 }; // создаем экземпляр класса
// vector
std::cout << "length: " << s.length() << '\n'; // вызываем метод
return 0;
}
Ключевое слово class позволяет создать пользовательский тип данных в языке C++, который может содержать как переменные-члены, так и методы.
Классы — это основа объектно-ориентированного программирования!
Задание №1
Создайте класс Numbers, который содержит два целых числа. Этот класс должен иметь две переменные-члены для хранения этих двух целых чисел. Вы также должны создать два метода:
метод set (), который позволит присваивать значения переменным;
метод print (), который будет выводить значения переменных.
Выполнение следующей функции main ():
Int main () {
Numbers n1;
n1.set (3, 3); // инициализируем объект n1 значениями 3 и 3
Numbers n2 {4, 4}; // инициализируем объект n2 значениями 4 и 4
n1.print ();
n2.print ();
return 0;
}
должно выдавать следующий результат:
Numbers (3, 3) Numbers (4, 4)
Спецификаторы доступа public и private
Рассмотрим следующую программу:
struct DateStruct // члены структуры являются открытыми по умолчанию
{
int day; // открыто по умолчанию, доступ имеет любой объект
int month; // открыто по умолчанию
Int year; // открыто по умолчанию
};
