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

Тут можно читать онлайн Стефан Дэвис - С++ для чайников . - бесплатно полную версию книги (целиком) без сокращений. Жанр: 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

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

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

Интервал:

Закладка:

Сделать

Есть ещё одна техническая причина, по которой функции-члены класса лучше делать встраиваемыми. Как вы помните, все структуры языка С обычно определяются в составе включаемых файлов с последующим использованием в исходных.срр -файлах при необходимости. Такие включаемые файлы не должны содержать данных или тел функций, поскольку могут быть скомпилированы несколько раз. Использование же подставляемых функций во включаемых файлах вполне допустимо, поскольку их тела, как и макросы, подставляются вместо вызова в исходном файле. То же относится и к классам С++. Подразумевая, что функции-члены, определённые в описании классов, встраиваемые, мы избегаем упомянутой проблемы многократной компиляции.»

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

_________________

163 стр. Глава 13. Работа с классами

►Определение функций-членов вне класса...164

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

В этом случае в заголовочном файле имеется только объявление, но не определение функции.

/* Savings — определение класса с */

/* возможностью делать вклады */

class Savings

{

public :

/* Объявляем, но не определяем функции-члены */

float deposit( float amount ) ;

unsigned int accountNumber ;

float balance ;

} ;

Теперь объявление класса содержит только прототип функции deposit( ) . При этом само тело функции находится в другом месте. Для простоты я определил функцию в том же файле, где находится и функция main( ) .

Так можно делать но подобное расположение функции не очень распространено - фото 191

«Так можно делать, но подобное расположение функции не очень распространено. Обычно класс определяется в заголовочном файле, а тело функции находится в отдельном исходном файле. Сама же использующая этот класс программа располагается в файле, отличном от этих двух ( подробнее об этом будет рассказано в главе 22, "Разложение классов").»

[ Советы ]

/* SavingsClassOutline — вызов фукции-члена, */

/* объявленной в классе Savings ( заголовочном файле ), но определённой */

/* в программе SavingsClassOutline или */

/* тело функции находится в отдельном исходном файле */

#include

#include

#include

using namespace std ;

#include " Savings.h "

/* Определение функции-члена Savings::deposit( ) ( обычно содержится в отдельном файле ) */

float Savings::deposit( float amount )

{

balance += amount ;

return balance ;

}

/* Основная программа */

int main( int nNumberofArgs , char* pszArgs[ ] )

{

/* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */

setlocale (LC_ALL,".1251");

Savings s ;

s.accountNumber = 123456 ;

s.balance = 0.0 ;

_________________

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

/* Добавляем немного на счёт... */

cout << "Вкладываем на счёт 10 монет"

<< s.accountNumber << endl ;

s.deposit( 10 ) ;

cout << "Состояние счёта "

<< s.balance << endl ;

/* Пауза для того, чтобы посмотреть на результат работы программы */

system( "PAUSE" ) ; return 0 ;

}

Определение класса содержит только прототип функции deposit а её тело - фото 192

Определение класса содержит только прототип функции deposit( ) , а её тело определено в другом месте. Такое объявление аналогично объявлению любого другого прототипа.

Обратите внимание, что при определении функции-члена deposit( ) потребовалось указание её полного имени

float Savings::deposit( float amount )

; сокращённого имени при определении вне класса недостаточно.

►Перегрузка функций-членов...165

Функции-члены могут перегружаться так же, как и обычные функции ( обратитесь к главе 6, "Создание функций", если забыли, что это значит ). Как вы помните, имя класса является частью полного имени, и все приведённые ниже функции вполне корректны.

class Student

{

public :

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

float grade( ) ;

/* grade — устанавливает новое значение оценки и возвращает предыдущее */

float grade( float newGPA )

/* ...прочие члены-данные... */

} ;

class Slope

{

public :

/* grade — возвращает снижение оценки */

float grade( ) ;

/* ...прочие члены-данные... */

} ;

/* grade — возвращает символьный эквивалент оценки */

char grade( float value ) ;

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

{

Student s ;

s.grade( 3.5 ) ; /* Student::grade( float ) */

float v = s.grade( ) ; /* Student::grade( ) */

char с = grade( v ) ; /* ::grade( float ) */

Slope o ;

float m = о.grade( ) ; /* Slope::grade( ) */

return 0 ;

}

_________________

165 стр. Глава 13. Работа с классами

Полные имена вызываемых из main( ) функций указаны в комментариях.

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

В приведённом примере первые два вызова обращаются к функциям-членам Student::grade( float ) и Student::grade( ) соответственно. Эти функции отличаются списками аргументов. Вызов функции s.grade( ) обращается к Student::grade( ) , поскольку тип объекта s — Student .

Третья вызываемая функция в данном примере — функция ::grade( float ) , не имеющая вызывающего объекта. Последний вызов осуществляется объектом типа Slope , и соответственно вызывается функция-член Slope::grade( float ) .

_________________

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

Глава 14. УКАЗАТЕЛИ НА ОБЪЕКТЫ...167

ОГЛАВЛЕНИЕ

В этой главе...

►Определение массивов и указателей 167

►Объявление массивов объектов 168

►Объявление указателей на объекты 169

►Передача объектов функциям 171

►Зачем использовать указатели и ссылки 174

►Возврат к куче 175

►Сравнение указателей и ссылок 175

►Почему ссылки не используются вместо указателей 175

►Использование связанных списков 176

►Списки в стандартной библиотеке 180

Программисты на С++ всё время создают массивы чего-либо. Формируются массивы целочисленных значений, массивы действительных значений; так почему бы не создать массив студентов? Студенты всё время находятся в списках ( причём гораздо чаще, чем им хотелось бы ). Концепция объектов Student , стройными рядами ожидающих своей очереди, слишком привлекательна, чтобы можно было пройти мимо неё.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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