VisualCBook
Главная
Новости
Книга
Об авторе
Закачки
Ссылки

Урок 8: Первый "класс". Секции.


Классы в С++

Начнём с того, что классы в С++ можно интерпритировать как новые типы данных. Т.е. вам даётся уникальная возможность создавать новые, собственные типы данных, причём без всяких ограничений. Вы скажете: "Как же классы можно называть типами данных, ведь у типов данных не бывает методов?". Вы скажете это и жестоко ошибётесь. Это не так, ведь арифмитические операции - это тоже методы, объявленные для некоторых типов данных. Так например для целочисленной переменной "i" подобная запись "i+" будет означать вызов функции сложения. Позже я объясню как перегузить операторы (+,-,*,/) для собственного класса.




Первый класс

Что ж, напишем первый класс. В поле рабочего документа вставте следующий код:

#include "iostram.h"


//Класс квадрата
class CSquare
{
    int a;//Длинна стороны квадрата
public:
    CSquare(){}//Конструктор класса
    ~CSquare(){}//Деструктор класс класса
    void setA(int num){ //Функция инициализации стороны квадрата
      a=num;
    }
    int Square(){ //Функция возвращающая площадь квадрата
      return a*a;
    }
};


void main(){
    CSquare sq;//создаём экземпляр класса СSquare
    int a;
    cin>>a;//ввод длинны стороны квадрата с клавиатуры
    sq.setA(a);
    //ввод длинны стороны квадрата в экземпляр класса
    cout>>sq.Square();
    //подсчёт площади квадрата и вывод ответа на экран
}

Разберём синтаксис и принципы работы класса на примере класса "Квадрат". Класс объявляется словм "class", затем идёт имя класса и "{" (к стати принято начинать имя класса с "C"). После "{" начинается private-секция. Ко всему, что там объявленно есть доступ только из класса. В нашем случае в private-секцие объявленна единственная переменная "a", характерезующая длинну ребра квадрата. Ключевое слово "public" означает начало public-секции, к содержимому которой доступно совершенно открыт. С конструктором и деструктором мы познакомимся в следующем уроке, а пока только скажу, что их наличие необходимо. Далее объявленны и реализованны две функции. Первая, setA, предназначенна для инициализации переменной "a" , т.е. для обозначения длинны стороны квадрата. Вторая - возвращает площадь квадрата со стороной "a". И наконец, объявление класса заканчивается знаками "};". Надо сказать, что функции класса (как и канструкторы и деструкторы) могут быть реализованны, как в классе, так и вне его. А может быть и так, что некоторые из них реализованны вне класса, а другие в классе. Разница лишь в том, что первые выполняются чуть медленнее, чем те, что реализованны в классе. Но вторые жрут намного больше ресурсов, чем первые. Так что, если нет особой спешки, реализовывайте функции вне класса. Приведу пример, как это делать:

.......
//Класс квадрата
class CSquare
{
    .......
    //объявление функции, инициализирующей сторону квадрата
    void setA(int num);
    //объявление функция, возвращающей площадь квадрата
    int Square();
};

//Реализация функий класса

//реализация функции, инициализирующей сторону квадрата
void CSquare::setA(int num){
    a=num;
}
//реализация функция, возвращающей площадь квадрата
int CSquare::Square(){
    return a*a;
}

.........

Итак, вернёмся к нашей программе. С функцией main вы уже знакомы. Строчка "CSquare sq;" объявляет переменную типа CSquare. Таких переменных может быть сколько угодно. И каждая такая переменная будет иметь индивидуальное значение переменных, т.е. можно смоделировать, например, целый массив из разных квадратов. Строки, связанные с вводом числа с клавиатуры, вам должны быть понятны. Строчка "sq.setA(a);" отвечает за вызов функции "setA" c параметром "a" для экземпляра "sq" класса "CSquare". Строка "cout>>sq.Square();" отвечает за вызов функции "Square" для экземпляра "sq" класса "CSquare" и вывода возвращаемого этой функцией значения на экран. Надеюсь, что вам всё было понятно. Подробнее о конструкторах, деструкторах и различных областях класса читайте в следующем уроке.




Секции

С этим слово вы уже сталкивались в предыдущем тексте, но я его не пояснял. Итак, я думаю необходимо внести ясность. Любой класс состоит из 3-х секций: public, private и protected. В каждой из этих секций могут быть объявленны как переменные, так и функции. Начинается любая секция со следующей строки "имя_секции:". Так, например, секция public будет начинаться со строки "public:". Закнчивается секция началом другой секции или "}". По умолчанию, т.е. если нет строки, объявляющей о начале какой-либо из секций, все функции и переменные объявляются в секции private. В классе может не быть элементов объявленных в той или иной секции, поэтому объявление этой секции не нужно, т.е. она в классе присутствует, но только условно. И последнее секции могут прерывать друг друга, т.е. может, например, сначала быть объявленна private-секция, потом public-секция, а затем снова private-секция и т.д.

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

Имя секции Доступ из класса Внешний доступ Доступ для наследников
private Есть Нет Нет
public Есть Есть Есть
protected Есть Нет Есть


Предыдущий урок | Оглавление | Следующий урок

Копирование любых материалов сайта без разрешения автора и владельца сайта запрещено.
© 2005 сайт VisualCBook.narod.ru
© 2005 Кадров Никита


Hosted by uCoz