Объектно-ориентированное программирование на C++


Введение в классы


Вероятно одним из наиболее важных понятий С++ является класс. Класс - это механизм для создания новых типов. Более детально понятие класса мы обсудим позднее, а пока ограничимся лишь кратким обзором.

Синтаксис описания класса похож на синтаксис описания структуры.

class имя_класса

{

закрытые элементы - члены класса

public:

 открытые элементы - члены класса

};

На что здесь следует обратить внимание?

  • Имя_класса с этого момента становится новым именем типа данных, которое используется для объявления объектов класса.
  • Члены класса - это переменные состояния и методы этого класса, иными словами членами класса могут быть как переменные, так и функции. Функции и переменные, объявленные внутри объявления класса, становятся членами этого класса. Функции-члены класса будем называть методами этого класса.
  • По умолчанию, все функции и переменные, объявленные в классе, становятся закрытыми (private) . Т.е. они доступны только из других членов этого класса. Для объявления открытых членов класса используется ключевое слово public. Все функции-методы и переменные, объявленные после слова public, доступны и для других членов класса, и для любой другой части программы, в которой содержится класс. В структурах по умолчанию все члены являются отрытыми. Так что, приведенные ниже примеры аналогичны.
  • struct _3d



    {

     double mod ();

     double projection (_3d r);

    private:

     double x, y, z;

    };

    или

    class _3d

    {

     double x, y, z;

    public:

     double mod ();

     double projection (_3d r);

    };

    В С++ для создания объектов традиционно принято использовать ключевое слово class. Существование структур, вероятно, оправдано поддержанием совместимости с С. В наших примерах мы иногда будем использовать struct для создания класса, на практике, как правило, в этом нет необходимости.

    Хотя функции mod() и projection(_3d r) объявлены в _3d, они еще не определены. Для определения метода - члена класса, нужно связать имя класса, частью которого является метод, с именем класса. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Два двоеточия называют операцией расширения области видимости.

    double _3d::mod ()

    {

     return sqrt (x*x + y*y +z*z);

    }

    double _3d::projection (_3d r)

    {

     return (x*r.x + y*r.y + z*r.z) / mod();

    }

    ...

    main()

    {

     _3d a, b;

     double dPro, dMod;

     dMod = a.mod();

     dPro = b.projection(a);

    }



    Содержание раздела