Стефан Дэвис - С++ для чайников .

Тут можно читать онлайн Стефан Дэвис - С++ для чайников . - бесплатно полную версию книги (целиком) без сокращений. Жанр: sci_tech, издательство Издательский дом Вильямс. Компьютерное издательство Диалектика, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    С++ для чайников .
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс. Компьютерное издательство Диалектика
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    0-7645-6852-3, 978-5-8459-0723-3
  • Рейтинг:
    4/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Стефан Дэвис - С++ для чайников . краткое содержание

С++ для чайников . - описание и краткое содержание, автор Стефан Дэвис, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
empty-line
1
empty-line
4

С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)

С++ для чайников . - читать книгу онлайн бесплатно, автор Стефан Дэвис
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

addCourse ( int hours , float grade ) — добавить пройденный курс;

grade ( ) — вернуть текущую среднюю оценку;

hours ( ) — вернуть количество прослушанных часов.

Оставшиеся члены класса Student можно объявить как защищённые, чтобы другие функции не могли "лезть" во внутренние дела класса Student .

class Student

{

public :

/* grade — возвращает текущую среднюю оценку */

float grade( )

{

return gpa ;

}

/* hours — возвращает количество прослушанных часов */

int hours( )

{

return semesterHours ;

}

/* addCourse — добавляет к записи студента прослушанный курс */

float addCourse( int hours , float grade )

/* Приведённые ниже члены недоступны для внешних функций */

protected :

int semesterHours ; /* Количество прослушанных часов */

float gpa ; /* Средняя оценка */

} ;

_________________

182 стр. Часть 3. Введение в классы

Теперь члены semesterHours и gpa доступны только из других членов класса Student , и приведённый ниже пример работать не будет.

Student s ;

int main( int argc , char* pArgs[ ] )

{

/* Повысим свой рейтинг ( но не слишком сильно, иначе никто не поверит ) */

s.gpa = 3.5 ; /* Вызовет ошибку при компиляции */

float gpa = s.grade( ) ; /* Эта открытая функция считывает значение переменной, но вы не можете непосредственно изменить её значение извне */

return 0 ;

}

При попытке этой программы изменить значение gpa на этапе компиляции будет выдано сообщение об ошибке.

Считается признаком хорошего тона не полагаться на значение защиты по - фото 211

«Считается признаком хорошего тона не полагаться на значение защиты по умолчанию, а определить в самом начале объявления класса ключевое словоpublic илиprivate . Обычно класс начинают описывать с открытых членов, формируя интерфейс класса. Описание защищённых членов класса выполняется позже.»

[ Советы ]

Члены класса могут быть защищены с помощью ещё одного ключевого слова private - фото 212

«Члены класса могут быть защищены с помощью ещё одного ключевого слова —private . Кстати, по умолчанию при описании класса его члены считаются описанными именно какprivate . Разница междуprotected иprivate станет ясной при изучении наследования.»

[ Технические подробности ]

►Чем хороши защищённые члены...183

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

Защита внутреннего устройства класса...183

Ключевое слово protected позволяет исключить возможность установки gpa равным не допустимому для этой величины значению. Внешнее приложение сможет добавить курс, но не сможет изменить значение среднего балла непосредственно. Если имеется необходимость непосредственного изменения значения gpa , класс может предоставить открытую функцию, предназначенную для этой цели, например:

class Student

{

public :

/* grade — делает то же, что и раньше */

float grade( )

{

return gpa ;

}

/* Даём возможность изменения средней оценки */

float grade( float newGPA )

{

float oldGPA = gpa ;

/* Проверяем допустимость значения */

if ( newGPA > 0 && newGPA <= 4.0 )

{

gpa = newGPA ;

}

return oldGPA ;

}

/* ...всё остальное остаётся без изменений */

protected :

int semesterHours ; /* Количество прослушанных часов */

float gpa ;

} ;

_________________

183 стр. Глава 15. Защищённые члены класса: не беспокоить!

Добавление новой функции grade( float ) позволяет внешним приложениям изменять содержимое gpa . Заметьте, что класс всё равно не позволяет внешним функциям полностью контролировать содержимое своих защищённых членов. Внешнее приложение не может присвоить gpa любое значение, а только то, которое лежит в диапазоне между 0 и 4.0.

Теперь класс Student обеспечивает внешний доступ к своим внутренним членам, одновременно не позволяя присвоить им недопустимое значение.

Классы с ограниченным интерфейсом...184

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

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

Ещё одна причина — едва ли не самая важная — в ограниченности человеческих возможностей удержать в голове большое количество объектов и связей между ними. Использование строго ограниченного интерфейса класса позволяет программисту отвлечься от деталей реализации, скрытых за этим интерфейсом. Соответственно, разработчик класса может не думать о том, как именно будет использоваться интерфейс разрабатываемого им класса.

►Обращение к защищённым члена...184

Может случиться так, что потребуется предоставить некоторым внешним функциям возможность обращения к защищённым членам класса. Для такого доступа можно воспользоваться ключевым словом friend ( друг ).

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

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

Объявление друзей должно находиться в классе, который содержит защищённые члены ( что является ещё одним аргументом в пользу того, чтобы функций-друзей было как можно меньше ). Подобное объявление выполняется почти так же, как и объявление обычных прототипов, и должно содержать расширенное имя друга, включающее типы аргументов и возвращаемого значения. В приведённом ниже примере функция initialize( ) получает доступ ко всем членам класса Student .

_________________

184 стр. Часть 3. Введение в классы

class Student ;

{

friendvoid initialize( Student* ) ;

public :

/* Те же открытые члены, что и раньше */

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стефан Дэвис читать все книги автора по порядку

Стефан Дэвис - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




С++ для чайников . отзывы


Отзывы читателей о книге С++ для чайников ., автор: Стефан Дэвис. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x