Классы и объекты, ограничение доступа. Члены класса и объекта. Методы. - Painted-Black/BMSTU-OOP GitHub Wiki

Класс – тип данных, представляющий совокупность атрибутов объекта (переменные члены класса) и возможных операций над этими объектами (методов класса).

class <имя класса> [:<список базовых классов>]
{
private: //доступ к данным есть только внутри самого класса
    Int a;
protected: //доступ есть внутри класса и во всех его наследниках
    Int b;
public: //доступны для внешнего кода
    Int f();
}; //класс заканчивается ; как и структура

//Классы описываются в заголовочных файлах .h. Методы же определяются в .cpp

MyClass a, *b = &a;
a.f();
b->f();

Данные, содержащиеся внутри класса, называют данными-членами или полями класса. Число полей класса, как и у структуры, теоретически может быть любым. Поскольку перед описанием поля somedata стоит ключевое слово private, это поле доступно только внутри класса.

Методы класса — это функции, входящие в состав класса. Если метод определен в определении класса, то он считается inline.

//Объединения и структуры из си являются частными случаями классов.

union IPv4 { int IntegerForm; char ByteForm[4]; };

//Однако юнион нельзя использовать в качестве базового класса и использовать для наследования.

struct Font { int Symbol:8; int isItalic:1; int isBold:1; int color:3 int :3 //необходимо для «закрытия» куска памяти – чтобы следующий юнион вдруг не попал на разделение байтов };

//Допускается неполное объявление: без определения класса.
class A; 

//Создание объектов проходит как с помощью 
MyClass A; 
//так и с помощью
MyClass *A = new MyClass;

<class.h>
class B
{
private:
    const int a; //поле должно быть инициализировано вместе с экземпляром класса, и не может изменяться.
public:
B(int a); //конструктор
void f() const; //константный метод – может вызываться для константных объектов; не может работать с константными       полями
void g();
};

<class.cpp>
#include “class.h”
B::B(int val): a(val) //, c(7) – всё это инициализация
{
}

const B obj; //в константном экземпляре можно вызывать ТОЛЬКО константные методы: obj.f() НО НЕ obj.g()

//Статические члены классов
class A
{
public:
   static void func();
private:
     static int b;
     static const char* text;
 };

 //Инициализация проходит через
 int A::b = 0;
 const char* text = "abc";

Поля класса не должны быть public, только private или protected. Порядок расположения: private, protected, public (метод белого ящика). В случае библиотечных классов порядок инвертируется: public, protected, private.

По возможности компилятор делает методы класса inline.

⚠️ **GitHub.com Fallback** ⚠️