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

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

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

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

Интервал:

Закладка:

Сделать

float xfrGPA = 0.0 )

{

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[ MAXNAMESIZE ] ;

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 ;

}

Теперь все три объекта строятся с помощью одного и того же конструктора а - фото 228

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

_________________

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

В ранних версиях С вы не смогли бы создать конструктор по умолчанию - фото 229

«В ранних версиях С++ вы не смогли бы создать конструктор по умолчанию, предусмотрев значения по умолчанию для всех аргументов. Конструктор по умолчанию должен был быть определён явно. Так что будьте готовы к тому, что некоторые старые версии компиляторов могут потребовать явного определения конструктора по умолчанию.»

[ Помни! ]

►Определение конструкторов по умолчанию...203

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

Если ваш класс имеет конструктор, С++ не будет автоматически его создавать ( как только С++ убеждается в том, что это не программа на С, он снимает с себя всю ответственность по обеспечению совместимости ).

Вывод если вы определили конструктор для вашего класса и при этом хотите - фото 230

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

[ Атас! ]

Приведённый ниже фрагмент демонстрирует сказанное. Этот пример вполне корректен.

class Student

{

/* ...то же, что и раньше, только без конструкторов */

} ;

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

{

Student noName ;

return 0 ;

}

Приведённый далее пример компилятор с негодованием отвергнет.

class Student

{

public :

Student( char *pName ) ;

} ;

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

{

Student noName ;

return 0 ;

}

To, что здесь добавлен конструктор Student ( char* ) , выглядит безобидно, но при этом заставляет С++ отказаться от автоматической генерации конструктора по умолчанию.

_________________

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

Не попадитесь в ловушку

♦♦♦♦♦

Ещё раз взгляните на объявление объектов класса student из приведённого выше примера:

Student noName ;

Student freshMan( "Smell E. Fish" ) ;

Student xfer( "Upp R. Classman" , 80 , 2.5 ) ;

Все объекты типа student , за исключением noName , объявлены со скобками, в которых находятся передаваемые классу аргументы. Почему же объект noName объявлен без скобок? С точки зрения приверженцев последовательности и аккуратности, лучше было бы объявлять этот объект так:

Student noName( ) ;

Конечно, можно сделать и так, но это не приведёт к ожидаемому результату. Вместо объявления объекта noName , создаваемого с помощью конструктора по умолчанию для класса student , будет объявлена функция, возвращающая по значению объект класса student . Мистика! Приведённые ниже два объявления демонстрируют, как похожи объявления объекта и функции в формате С++. ( Я-то считаю, что это можно было сделать и по-другому, но кто будет со мной считаться?.. ) Единственное отличие заключается в том, что при объявлении функции в скобках стоят названия типов, а при объявлении объекта в скобках содержатся объекты.

Student thisIsAFunc( int ) ;

Student thisIsAnObject( 10 ) ;

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

♦♦♦♦♦

►Конструирование членов класса...204

В предыдущих примерах использовались данные-члены простых типов, такие как float или int . Переменные таких простых типов легко инициализировать, передав необходимое значение конструктору. Но что, если класс содержит данные-члены, которые являются объектами других классов? Рассмотрим приведённый ниже пример.

/* ConstructingMembers — передача параметров */

/* конструктору члена */

#include

#include

#include

#include

using namespace std ;

const int MAXNAMESIZE = 40 ;

int nextStudentId = 0 ;

class StudentId

{

public :

StudentId( )

{

value = ++nextStudentId ;

cout << "Присвоение id " << value << endl ;

}

protected :

_________________

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

int value ;

} ;

class Student

{

public :

Student( char* pName )

{

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

<< " )" << endl ;

strncpy( name , pName , MAXNAMESIZE ) ;

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

semesterHours = 0 ;

gpa = 0.0 ;

}

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

protected :

char name[ MAXNAMESIZE ] ;

int semesterHours ;

float gpa ;

StudentId id ;

} ;

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

{

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

Student s( "Chester" ) ;

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

system( "PAUSE" ) ; return 0 ;

}

В момент создания объекту типа Student присваивается собственный идентификатор. В данном примере идентификаторы "раздаются" последовательно, с помощью глобальной переменной nextStudentId .

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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