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

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

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

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

Интервал:

Закладка:

Сделать

Например, банковский счёт без номера не является приемлемым ( С++ всё равно, каков номер счёта, но это почему-то волнует банк ). Можно создать объект BankAccount без номера, а затем потребовать от приложения вызвать некоторую функцию-член для инициализации номера счёта перед использованием. Однако это нарушает наши правила, поскольку при таком подходе класс вынужден полагаться на то, что эти действия будут выполнены внешним приложением.

Как использовать конструктор с аргументами...199

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

При этом нельзя забывать, что вы вызываете конструктор не как нормальную функцию и передать ему аргумент можно только в момент создания объекта. Так, приведённая ниже программа создаёт объект s класса Student , вызывая конструктор Student( char* ) . Объект s уничтожается в момент возврата из функции main( ) .

//

/* ConstructorWArg — конструктор с аргументами */

//

#include

#include

#include

#include

using namespace std ;

const int MAXNAMESIZE = 40 ;

class Student

{

public :

Student( char* pName )

{

strncpy( name , pName , MAXNAMESIZE ) ;

name[ MAXNAMESIZE - 1 ] = '\0' ;

semesterHours = 0 ;

gpa = 0.0 ;

}

/* ...прочие открытые члены... */

protected :

char name[ MAXNAMESIZE ] ;

int semesterHours ;

float gpa ;

} ;

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

{

setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */

Student s( "О. Danny Boy" ) ;

Student* pS = new Student( "E. Z. Rider" ) ;

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

system( "PAUSE" ) ; return 0 ;

}

_________________

199 стр. Глава 17. Аргументация конструирования

В этом примере конструктор выглядит почти так же, как и конструктор из главы 16, "Создание и удаление объектов", с тем лишь отличием, что он принимает аргумент pName , имеющий тип char *. Этот конструктор инициализирует все данные-члены нулевыми значениями, за исключением члена name , который инициализируется строкой pName .

Объект s создаётся в функции main( ) . Аргумент, передаваемый конструктору, находится в строке объявления s сразу же за именем объекта. Благодаря такому объявлению студент s получил имя Danny . Закрывающая фигурная скобка функции main( ) вызывает гром и молнию деструктора на голову несчастного Danny . Аналогично создаётся объект в куче.

Многие конструкторы в этой главе нарушают правило функции размером больше - фото 225

«Многие конструкторы в этой главе нарушают правило "функции размером больше трёх строк не должны бытьinline -функциями". Я просто решил облегчить вам чтение ( а теперь — ваши аплодисменты! ).»

[ Атас! ]

►Перегрузка конструктора...200

Поскольку в этой главе проводятся параллели между конструктором и обычными функциями-членами, я позволю себе ещё одну параллель: конструкторы можно перегружать.

Словосочетание перегруженная функция означает что определено несколько - фото 226

«Словосочетание "перегруженная функция" означает, что определено несколько функций с одинаковым именем, но разными типами аргументов. Если вы немного подзабыли этот термин, освежите память, обратившись к главе 6, "Создание функций".»

[ Помни! ]

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

/* OverloadConstructor — несколько способов */

/* создать объект путём */

/* перегрузки конструктора */

#include

#include

#include

#include

using namespace std ;

const int MAXNAMESIZE = 40 ;

class Student

{

public :

Student( )

_________________

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

{

cout << "Конструктор Student( )" << endl ;

semesterHours = 0 ;

gpa = 0.0 ;

name[ 0 ] = '\0' ;

}

Student( char *pName )

{

cout << "Конструктор Student( " << pName

<<" )" << endl ;

strncpy( name , pName , MAXNAMESIZE ) ;

name[ MAXNAMESIZE - 1 ] = '\0' ;

semesterHours = 0 ;

gpa = 0 ;

}

Student( char *pName , int xfrHours , float xfrGPA )

{

cout << "Конструктор Student( " << pName << ","

<< xfrHours << "," << xfrGPA << " )" << endl ;

strncpy( name , pName , MAXNAMESIZE ) ;

name[ MAXNAMESIZE - 1 ] = '\0' ;

semesterHours = xfrHours ;

gpa = xfrGPA ;

}

~Student( )

{

cout << "Деструктор Student" << endl ;

}

protected :

char name[ 40 ] ;

int semesterHours ;

float gpa ;

} ;

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

{

setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */

/* Вызов трёх разных конструкторов */

Student noName ;

Student freshman( "Marian Haste" ) ;

Student xferStudent( "Pikumup Andropov" , 80 , 2.5 ) ;

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

system( "PAUSE" ) ; return 0 ;

}

Поскольку объект noName реализован без аргументов он конструируется с - фото 227

Поскольку объект noName реализован без аргументов, он конструируется с использованием Student::Student( ) , который называется конструктором по умолчанию или пустым конструктором. ( Я предпочитаю последнее название, но, поскольку первое более распространённое, в этой книге будет использоваться именно оно. ) Объект freshMan создаётся с использованием конструктора, которому нужен только один аргумент типа char* ; объекту xfеr требуется конструктор с тремя аргументами.

Заметьте, что все три конструктора ( и особенно два последних ) очень похожи. Единственное отличие второго конструктора от третьего заключается в том, что он обнуляет поля semesterHours и gpa , в то время как третий конструктор может присваивать им передаваемые в качестве аргументов значения.

_________________

201 стр. Глава 17. Аргументация конструирования

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

/* ConstructorWDefaults — несколько конструкторов */

/* зачастую могут быть */

/* бъединены в один */

#include

#include

#include

#include

using namespace std ;

const int MAXNAMESIZE = 40 ;

class Student

{

public :

Student( char *pName = "no name" ,

int xfrHours = 0 ,

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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