Так как мы обсуждаем языки ООП, то после этого введения, начнём обсуждать классы и объекты. Я надеюсь, что каждый ясно понимает разницу между этими двумя терминами. В двух словах, класс - это тип данных, а объект - экземпляр типа класс. "Кружка" - это класс (тип). А уж которая, - синяя или красная, - это два разных объекта (экземпляра), типа "кружка". Как нам теперь использовать объекты в языках, использующих различные объектные модели?

C++: если у нас есть класс MyClass с методом MyMethod, мы можем написать:

MyClass Obj;
Obj.MyMethod();

и получить объект класса MyClass с именем Obj. Память для этого объекта обычно выделяется в стеке, и вы можете сразу начать использовать объект, как это сделано во второй строке.

Также возможно выделить память для объекта в куче и оперировать указателем на объект:

MyClass *obj = new MyClass();
obj->MyMethod();
delete obj;//освобождаем память

 

 

ПРИМЕР КЛАСС

 

class Students {
    // Имя студента
    std::string name;
    // Фамилия
    std::string last_name;
    // Пять промежуточных оценок студента
    int scores[5];
    // Итоговая оценка за семестр
    float average_ball;
};
Основные понятия
Классы в программировании состоят из свойств и методов. Свойства — это любые данные, которыми можно характеризовать объект класса. В нашем случае, объектом класса является студент, а его свойствами — имя, фамилия, оценки и средний балл.
У каждого студента есть имя — name и фамилия last_name . Также, у него есть промежуточные оценки за весь семестр. Эти оценки мы будем записывать в целочисленный массив из пяти элементов. После того, как все пять оценок будут проставлены, определим средний балл успеваемости студента за весь семестр — свойство average_ball.
Методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса. Добавим в наш класс функцию calculate_average_ball(), которая будет определять средний балл успеваемости ученика.
Методы класса — это его функции.
Свойства класса — его переменные.
class Students {
    public:
        // Функция, считающая средний балл
        void calculate_average_ball()
        {
            int sum = 0; // Сумма всех оценок
            for (int i = 0; i < 5; ++i) {
                sum += scores[i];
            }
            // считаем среднее арифметическое
            average_ball = sum / 5.0;
        }

        // Имя студента
        std::string name;
        // Фамилия
        std::string last_name;
        // Пять промежуточных оценок студента
        int scores[5];

    private:
        // Итоговая оценка за семестр
        float average_ball;
};
Функция calculate_average_ball() просто делит сумму всех промежуточных оценок на их количество.
Модификаторы доступа public и private
Все свойства и методы классов имеют права доступа. По умолчанию, все содержимое класса является доступным для чтения и записи только для него самого. Для того, чтобы разрешить доступ к данным класса извне, используют модификатор доступа public. Все функции и переменные, которые находятся после модификатора public, становятся доступными из всех частей программы.
Закрытые данные класса размещаются после модификатора доступа private. Если отсутствует модификатор public, то все функции и переменные, по умолчанию являются закрытыми (как в первом примере).
Обычно, приватными делают все свойства класса, а публичными — его методы. Все действия с закрытыми свойствами класса реализуются через его методы. Рассмотрим следующий код.
class Students {
    public:
        // Установка среднего балла
        void set_average_ball(float ball)
        {
            average_ball = ball;
        }
        // Получение среднего балла
        float get_average_ball()
        {
            return average_ball;
        }
        std::string name;
        std::string last_name;
        int scores[5];

    private:
        float average_ball;
};
Мы не можем напрямую обращаться к закрытым данными класса. Работать с этими данными можно только посредством методов этого класса. В примере выше, мы используем функцию get_average_ball() для получения средней оценки студента, и set_average_ball() для выставления этой оценки.
Функция set_average_ball() принимает средний балл в качестве параметра и присваивает его значение закрытой переменной average_ball. Функция get_average_ball() просто возвращает значение этой переменной.

 

КЛАСС ПРИМЕР


Класс в языке C++ создаётся следующим образом:

  class MyClass: public ParentClass // ParentClass — класс-предок, если таковой имеется
  {
      public:
         // элементы в этой секции доступны из любой части программы
         MyClass(); // конструктор
         ~MyClass(); // деструктор
      protected:
         // элементы в этой секции доступны из класса и его потомков
      private:
         // элементы в этой секции доступны только из класса; это область доступа по умолчанию
  };
После своего создания класс считается полноценным типом данных и, следовательно экземпляры класса создаются следующим образом:

  MyClass myinstance;
Обращение к членам класса:

  myinstance.classmember
Уничтожается экземпляр класса, как и любая переменная, только в случае, если функция, в которой он был создан, завершила работу или если была принудительно освобождена динамическая память, выделенная под класс.

Классы в языке C#[править | править вики-текст]
Классы в языке C# определяются следующим образом:

public class MyClass
{
   //Член, доступный любому классу программы
   public int k;
   //Член, доступный любому классу в том же модуле программы
   internal int l;
   //Член, доступный любому классу в том же модуле программы либо только текущему классу и всем его подклассам в другом модуле
   protected internal int m;
   //Член, доступный только текущему классу и всем его подклассам
   protected int n;
   //Член, доступный только из текущего класса (по умолчанию).
   private int p;
}
В отличие от C++ модификаторы доступа должны указываться для каждого члена в отдельности. Анонимные классы можно определить в методе, например, так:

public void DoSomething()
{
    var person = new
        {
         Name = "Маргарита";
         Age = 15;
        }
 
    var pet = new
        {
          Name = "Дуня";
          Type = "Черепаха";
          Owner = person;
        }
 
    Console.WriteLine("Age of pet owner: " + pet.Owner.Age);
}