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

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

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

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

Интервал:

Закладка:

Сделать

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

//

/* DestructMembers — демонстрация использования */

/* конструкторов и деструкторов */

//

#include

#include

#include

using namespace std ;

class Course

{

public :

Course( ) { cout << "Конструктор Course" << endl ; }

~Course( ) { cout << "Деструктор Course" << endl ; }

} ;

class Student

{

public :

Student( )

{

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

semesterHours = 0 ;

gpa = 0.0 ;

_________________

195 стр. Глава 16. Создание и удаление объектов

}

~Student( ) { cout << "Деструктор Student" << endl ; }

protected :

int semesterHours ;

float gpa ;

} ;

class Teacher

{

public :

Teacher( )

{

cout << "Конструктор Teacher" << endl ;

pC = new Course ;

}

~Teacher( )

{

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

delete pC ;

}

protected :

Course* pC ;

} ;

class TutorPair

{

public :

TutorPair( )

{

cout << "Конструктор TutorPair" << endl ;

noMeetings = 0 ;

}

~TutorPair( ) { cout << "Деструктор TutorPair" << endl ; }

protected :

Student student ;

Teacher teacher ;

int noMeetings ;

} ;

TutorPair* fn( )

{

cout << "Создание объекта TutorPair в функции fn( )"

<< endl ;

TutorPair tp ;

cout << "Создание объекта TutorPair в куче" << endl ;

TutorPair* pTP = new TutorPair ;

cout << "Возврат из функции fn ( )" << endl ;

return pTP ;

}

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

{

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

/* Вызов функции fn( ) и возврат объекта TutorPair в куче */

TutorPair* pTPReturned = fn( ) ;

cout << "Получен объект в куче" << endl ;

delete pTPReturned ;

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

system( "PAUSE" ) ; return 0 ;

}

_________________

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

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

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

Создание объекта TutorPair в функции fn Конструктор Student Конструктор - фото 223

Создание объекта TutorPair в функции fn( )

Конструктор Student

Конструктор Teacher

Конструктор Course

Конструктор TutorPair

Создание объекта TutorPair в куче

Конструктор Student

Конструктор Teacher

Конструктор Course

Конструктор TutorPair

Возврат из функции fn( )

Деструктор TutorPair

Деструктор Teacher

Деструктор Course

Деструктор Student

Получен объект в куче

Деструктор TutorPair

Деструктор Teacher

Деструктор Course

Деструктор Student

Press any key to continue...

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

Последовательность вызовов деструкторов при уничтожении объекта всегда имеет - фото 224

«Последовательность вызовов деструкторов при уничтожении объекта всегда имеет порядок, обратный порядку вызова конструкторов при создании этого объекта.»

[ Помни! ]

_________________

197 стр. Глава 16. Создание и удаление объектов

Глава 17. АРГУМЕНТАЦИЯ КОНСТРУИРОВАНИЯ...198

ОГЛАВЛЕНИЕ

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

►Как снабдить конструктор аргументами 198

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

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

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

►Управление последовательностью конструирования 208

Класс представляет тип объекта в реальном мире. Например, мы использовали класс Student для представления студента и его свойств. Точно так же, как и студенты, классы считают себя абсолютно самостоятельными. Однако, в отличие от студентов, класс действительно сам "ухаживает" за собой — он должен всё время поддерживать себя в приемлемом состоянии.

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

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

►Как снабдить конструктор аргументами...198

С++ позволяет программисту определить конструктор с аргументами, например:

class Student

{

public :

Student( char *pName) ;

/* Продолжение класса Student */

} ;

Зачем конструкторам нужны аргументы...198

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

_________________

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

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

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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