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

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

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

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

Интервал:

Закладка:

Сделать

Student( Student & s )

{

strcpy( name , "Копия " ) ;

strcat( name , s.name ) ;

id = s.id ;

cout << "Сконструирована " << name << endl ;

}

~Student( )

{

cout << "Деструкция " << name << endl ;

}

protected :

_________________

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

char name[ MAXNAMESIZE ] ;

int id ;

} ;

/* fn — передача параметра по значению */

void fn( Student copy )

{

cout << "В функции fn( )" << endl ;

}

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

{

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

Student Chester( "Chester" , 1234 ) ;

cout << "Вызов fn( )" << endl ;

fn( Chester ) ;

cout << "Возврат из fn( )" << endl ;

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

system( "PAUSE" ) ; return 0 ;

}

После запуска этой программы на экран будут выведены следующие строки:

Конструируем Chester Вызов fn Сконструирована Копия Chester В функции - фото 242

Конструируем Chester

Вызов fn( )

Сконструирована Копия Chester

В функции fn( )

Деструкция Копия Chester

Возврат из fn( )

Press any key to continue...

Деструкция Chester

Давайте внимательно рассмотрим, как же работает эта программа. Обычный конструктор выводит первую строку; затем main( ) выводит строку "Вызов..." . После этого С++ вызывает копирующий конструктор для создания копии объекта Chester ( которая и передаётся функции fn( ) в качестве аргумента ). Эта копия будет ликвидирована при возврате из функции fn( ) ; исходный же объект Chester ликвидируется при выходе из main( ) .

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

►Автоматический конструктор копирования...215

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

_________________

215 стр. Глава 18. Копирующий конструктор

Копирующий конструктор создаваемый С выполняет поэлементное копирование - фото 243

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

[ Диск ]

/* DefaultCopyConstructor — демонстрация вызова */

/* конструктором копирования по */

/* умолчанию конструкторов */

/* копирования членов */

#include

#include

#include

#include

using namespace std ;

const int MAXNAMESIZE = 40 ;

class Student

{

public :

Student( char *pName = "no name" )

{

strcpy( name , pName ) ;

cout << "Конструируем " << name << endl ;

}

Student( Student & s )

{

strcpy( name , "Копия " ) ;

strcat( name , s.name ) ;

cout << "Сконструирована " << name << endl ;

}

~Student( )

{

cout << "Деструкция " << name << endl ;

}

protected :

char name[ MAXNAMESIZE ] ;

} ;

class Tutor

{

public :

/* Вызов конструктора копирования Student */

Tutor( Student & s ) : student( s )

{

cout << "Конструирование объекта Tutor" << endl ;

id = 0 ;

}

protected :

_________________

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

Student student ;

int id ;

} ;

void fn( Tutor tutor )

{

cout << "В функции fn( )" << endl ;

}

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

{

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

Student Chester( "Chester" ) ;

Tutor tutor( Chester ) ;

cout << "Вызов fn ( )" << endl ;

fn( tutor ) ;

cout << "Возврат из fn( )" << endl ;

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

system( "PAUSE" ) ; return 0 ;

}

Запуск этой программы приведёт к выводу таких сообщений:

Конструируем Chester Сконструирована Копия Chester Конструирование объекта - фото 244

Конструируем Chester

Сконструирована Копия Chester

Конструирование объекта Tutor

Вызов fn( )

Сконструирована Копия Копия Chester

В функции fn( )

Деструкция Копия Копия Chester

Возврат из fn( )

Press any key to continue . . .

Деструкция Копия Chester

Деструкция Chester

Конструирование объекта Chester приводит к вызову конструктора Student , который выводит первое сообщение. Конструктор объекта tutor вызывает копирующий конструктор Student для генерации собственного члена student , и приводит к выводу следующих двух строк.

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

Конструктор копирования по умолчанию Tutor вызывает конструкторы копирования для членов-данных. Копирующий конструктор для int просто копирует значение, но конструктор копирования Student генерирует вывод на экран строки Сконструирована Копия Копия Chester . Деструктор копии вызывается как часть возврата из функции fn( ) .

►"Мелкие " и "глубокие " копии...217

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

_________________

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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