Джесс Либерти - Освой самостоятельно С++ за 21 день. Страница 31

Тут можно читать бесплатно Джесс Либерти - Освой самостоятельно С++ за 21 день.. Жанр: Компьютеры и Интернет / Программирование, год неизвестен. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте «WorldBooks (МирКниг)» или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Джесс Либерти - Освой самостоятельно С++ за 21 день.

Джесс Либерти - Освой самостоятельно С++ за 21 день. краткое содержание

Прочтите описание перед тем, как прочитать онлайн книгу «Джесс Либерти - Освой самостоятельно С++ за 21 день.» бесплатно полную версию:
В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

Джесс Либерти - Освой самостоятельно С++ за 21 день. читать онлайн бесплатно

Джесс Либерти - Освой самостоятельно С++ за 21 день. - читать книгу онлайн бесплатно, автор Джесс Либерти

Дело в том, что применение методов доступа позволяет скрыть от пользователя детали хранения данных в объектах, в то же время, снабжая их методами использования этих данных. В результате можно модернизировать способы хранения и обработки данных внутри класса, не переписывая при этом методы доступа и вызовы их во внешнем программном коде.

Если для некоторой внешней функции в программе, возвращающей возраст объекта Cat, открыть непосредственный доступ к переменной itsAge, то эту функцию пришлось бы переписывать в том случае, если автор класса Cat решит изменить способ хранения этого компонента данных. Однако если между внешней функцией и данными класса будет стоять функция-член GetAge(), то класс Cat можно будет модернизировать сколько угодно раз, что никак не повлияет на способ вызова функции GetAge() в основном коде программы. При вызове в программе метода доступа не нужно знать, хранится ли нужное значение в переменной типа unsigned integer или long либо оно вычисляется при запросе.

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

В листинге 6.2 показан класс Cat, в котором в этот раз объявлены закрытые переменные-члены и открытые методы доступа к закрытым данным. Обратите внимание, что перед вами не выполняемый вариант программы, а только объявление класса.

Листинг 6.2. Объявление методов доступа к данным класса

1: // Объявление класса Cat

2: // Переменные-члены объявляются закрытыми, а открытые методы доступа

3: // обеспечивают инициализацию переменных-членов и возвращение их значений

4:

5: class Cat

6: {

7:    public:

8:    // открытые методы доступа

9:    unsigned int GetAge();

10:   void SetAge(unsigned int Age);

11:

12:   unsigned int GetWeight();

13:   void SetWeight(unsigned int Weight);

14:

15:   // открытые функции-члены

16:   void Meow();

17:

18:   // закрытые переменные-члены

19:   private:

20:   unsigned int itsAge;

21:   unsigned int itsWeight;

22:

23: };

Анализ: Этот класс имеет пять открытых методов. В строках 9 и 10 содержатся :/:<<**v>>>>* объявления методов обеспечения доступа к переменной-члену itsAge. А в строках 12 и 13 объявляются методы доступа к переменной-члену itsWeight. Эти функции-члены инициализируют переменные и возвращают их значения.

В строке 16 объявляется открытая функция-член Meow(). Функция Meow() не является методом доступа. Она не получает и не устанавливает значение переменной-члена, а выполняет другой вид сервиса для класса, выводя слово Meow на экран.

Сами переменные-члены объявляются в строках 20 и 21.

Чтобы установить возраст кота Frisky, нужно передать соответствующее значение методу SetAge():

Cat Frisky;

Frisky.SetAge(5); // устанавливаем возраст Frisky с помощью открытого метода-доступа

Ограничение доступа к данным - это не способ защиты данных, а лишь средство облегчения программирования 

Объявление методов или данных закрытыми позволяет компилятору заблаговременно находить ошибки программирования. Начинающие программисты часто ошибочно полагают, что объявляя данные закрытыми, тем самым скрывают некоторую секретную информацию от пользователей, не имеющих соответствующих прав доступа. В действительности это не так. По этому поводу Страустрап (Stroustrup), изобретатель языка C++, сказал: "Механизмы управления доступом в C++ обеспечивают защиту от несчастного случая, но не от мошенника" (ARM, 1990).

Рекомендуется:Объявляйте закрытыми переменные- члены класса (с помощью ключевого слова private).

Объявляйте открытыми методы доступа к закрытым данным-членам класса. Используйте для обработки данных-членов закрытые функции-члены класса.

Не рекомендуется:Не пытайтесь использовать закрытые переменные-члены вне класса.

Ключевое слово class

Ключевое слово class имеет следующий синтаксис:

class имя_класса

{

// здесь находятся ключевые слова управления доступом

// здесь объявляються переменные и методы класса

};

Ключевое слово class используется для объявления новых типов. Класс — это коллекция данных-членов класса, которые представляют собой переменные различных типов, включая другие классы. Класс также содержит функции класса, или методы, которые используются для выполнения действий над данными класса, а также для выполнения других видов сервиса внутри класса.

Определение объектов нового типа во многом подобно определению любых переменных. Сначала указывается тип (класс), а затем имя переменной (объект). Для обращения к членам класса Данным и функциям) используется оператор точки (.). Для объявления открытых или закрытых разделов класса используются ключевые слова управления доступом public или private. По умолчанию действует закрытый режим доступа. Каждое ключевое слово изменяет режим управления доступом с момента использования этого ключевого слова и до конца объявления класса или до тех пор, пока не встретится следующее ключевое слово управления доступом. Все объявления классов оканчиваются закрывающей фигурной скобкой и точкой с запятой.

Пример 1:

class Cat

{

public:

   unsigned int Age;

   unsigned int Weight;

   void Meow();

}

Cat Frisky;

Frisky.Age = 8;

Frisky.Weight = 18;

Frisky.Meow();

Пример 2:

class Car

{

public:

   void Start();

   void Accelerate();

   void Brake();

   void SetYear(int year);

   int GetYear();

private:

   int Year;

   Char Model[255];

};

Car OldFaithful;

int bought;

OldFaithful.SetYear(84);

bought = OldFaithful.GetYear();

OldFaithful.Start();

Определение методов класса 

Как упоминалось выше, методы доступа обеспечивают интерфейс для работы с закрытыми переменными-членами класса. Для методов доступа, как и для всех других объявленных методов класса, следует определять выполнение. Таким образом, методы объявляются и определяются в классе.

Определение функции-члена начинается с имени класса, за которым следуют два двоеточия, имя функции и ее параметры. В листинге 6.3 показано объявление простого класса Cat, в котором присутствуют определения ранее объявленных методов доступа к данным и одной обычной функции-члена.

Листинг 6.3. определение методов простого класса

1: // Пример определения методов в

2: // объявлении класса

3:

4: #include <iostream.h> // для объекта cout

5:

6: class Cat // начало объявления класса

7: {

8: public: // начало раздела public

9:    int GetAgeO; // метод доступа

10:   void SetAge (int age); // метод доступа

11:   void Meow(); // обычный метод

12: private: // начало раздела

13:   int itsAge; // переменная-член

14: };

15:

16: // GetAge, открытая функция доступа,

17:// возвращает значение переменной-члена itsAge

18: int Cat::GetAge()

19: {

20:    return itsAge;

21: }

22:

23: // Определение открытой функции доступа SetAge

24: // Функция SetAge

25: // инициирует переменную-член itsAge

26: void Cat::SetAge(int age)

27: {

28:    // устанавливаем переменную-член itsAge равной

29:    // значению, переданному с помощью параметра age

30:    itsAge = age;

31: }

32:

33: // Определение метода Meow

34: // возвращает void

35: // параметров нет

36: // используется для вывода на экран текста "Meow"

37: void Cat::Meow()

38: {

39:    cout << "Meow.\n";

40: }

41:

42: // Создаем виртуальную кошку, устанавливаем ее возраст, разрешаем

43: // ей мяукнуть, сообщаем ее возраст, затем снова "мяукаем".

44: int main()

45: {

46:    Cat Frisky;

47:    Frisky.SetAge(5);

48:    Frisky.Meow();

49:    cout << "Frisky is а cat who is ";

50:    cout << Frisky.QetAge() << " years old.\n";

51:    Frisky.Meow();

52:    return 0;

53: }

Результат:

Meow.

Frisky is а cat who is 5 years old.

Meow.

Анализ: В строках 6—14 содержится определение класса Cat. Строку 8 занимает ключевое слово public, которое сообщает компилятору, что за ним следует набор открытых членов класса. В строке 9 содержится объявление открытого метода GetAge(), который предоставляет доступ к закрытой переменной-члену itsAge, объявляемой в строке 13. В строке 10 объявляется открытая функция доступа SetAge(), которая принимает в качестве аргумента целочисленное значение и присваивает переменной itsAge значение этого аргумента.

В строке 11 объявляется метод Meow(). Этот метод не является функцией доступа к данным-членам класса, а используется для вывода на экран слова Meow.

В строке 12 начинается закрытый раздел, который включает только одно объявление закрытой переменной-члена itsAge (строка 13). Объявление класса завершается закрывающей фигурной скобкой и точкой с запятой в строке 14.

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.