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

Здесь есть возможность читать онлайн «Стефан Дэвис - С++ для чайников .» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Издательский дом Вильямс. Компьютерное издательство Диалектика, Жанр: Технические науки, Программирование, Программы, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

С++ для чайников .: краткое содержание, описание и аннотация

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

empty-line
1
empty-line
4

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

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

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

«Главное правило заключается в следующем: конструктор копирования используется при создании нового объекта, а оператор присвоения — если объект слева от символа присвоения уже существует.»

[ Советы ]

►Переопределение оператора присвоения...273

Следующая программа демонстрирует переопределение оператора присвоения. В программе также представлен конструктор копирования — просто для сравнения.

//

/* DemoAssignmentOperator — демонстрация оператора */

/* присвоения для пользовательского класса */

//

#include

#include

#include

#include

using namespace std ;

/* Name — класс для демонстрации присвоения и конструктора копирования */

class Name

{

public :

Name( char *pszN = 0 )

{

copyName( pszN , " " ) ;

}

Name( Name & s )

{

cout << "Вызов конструктора копирования" << endl ;

copyName( s.pszName , " ( copy ) " ) ;

}

~Name( )

{

deleteName( ) ;

}

/* Оператор присвоения */

Name & operator=( Name & s )

{

cout << "Выполнение присвоения" << endl ;

_________________

273 стр. Глава 23. Оператор присвоения

/* Удаляем выделенную память... */

deleteName( ) ;

/* ...перед заменой её новым блоком */

copyName( s.pszName , " ( replaced ) " ) ;

/* Возвращаем ссылку на существующий объект */

return *this ;

}

/* Очень простая функция доступа */

char* out( ) { return pszName ; }

protected :

void copyName( char* pszN , char* pszAdd ) ;

void deleteName( ) ;

char *pszName ;

} ;

/* copyName( ) — Выделение памяти из кучи и сохранение строк в ней */

void Name::copyName( char* pszN , char* pszAdd )

{

pszName = 0 ;

if ( pszN )

{

pszName = new char[ strlen( pszN ) +

strlen( pszAdd ) + 1 ] ;

strcpy( pszName , pszN ) ;

strcat( pszName , pszAdd ) ;

}

}

/* deleteName( ) — возврат памяти в куче */

void Name::deleteName( )

{

if ( pszName )

{

delete pszName ;

pszName = 0 ;

}

}

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

{

setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

/* Создание двух объектов */

Name n1( "Claudette" ) ;

Name n2( "Greg" ) ;

cout << "n1 ( " << n1.out( ) << " ) и "

<<"n2 ( " << n2.out( ) << " ) — "

<< "вновь созданные объекты"

<< endl ;

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

cout << "Name n3( n1 ) ;" << endl ;

Name n3( n1 ) ;

cout << "n3 ( " << n3.out( ) << " ) — копия n1" << endl ;

_________________

274 стр. Часть 5. Полезные особенности

/* Создание нового объекта с использованием формата с "=" для обращения к конструктору копирования */

cout << "Name n4 = n1 ;" << endl ;

Name n4 = n1 ;

cout << "n4 ( " << n4.out( ) << " ) — ещё одна копия n1"

<< endl ;

/* Перезапись n2 объектом n1 */

cout << "n2 = n1" << endl ;

n2 = n1 ;

cout << "n1 ( " << n1.out( ) << " ) присвоен объекту "

<< "n2 ( " << n2.out( ) << " )" << endl ;

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

system( "PAUSE" ) ; return 0 ;

}

Класс Name содержит указатель на имя человека которое записывается в блок - фото 296

Класс Name содержит указатель на имя человека, которое записывается в блок памяти, выделяемый из кучи. Конструктор и деструктор класса Name аналогичны представленным в главах 17, "Аргументация конструирования", и 18, "Копирующий конструктор". Конструктор Name( char* ) копирует переданное ему имя в член pszName . Этот конструктор служит также в роли конструктора по умолчанию. Конструктор копирования Name( Name & ) копирует имя переданного объекта при помощи функции-члена copyName( ) . Деструктор освобождает блок памяти при помощи вызова deleteName( ) .

Оператор присвоения operator=( ) является методом класса. Он выглядит как деструктор, за которым тут же следует конструктор копирования, что представляет собой вполне типичную ситуацию. Рассмотрим присвоение n2 = n1 . Объект n2 уже имеет связанное с ним имя " Greg ". В процессе присвоения память, выделенная для этого имени, освобождается при помощи вызова deleteName( ) , так же, как это делается в деструкторе. Затем оператор присвоения вызывает copyName( ) для копирования новой информации в объект, подобно тому, как это делается в конструкторе копирования.

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

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

Интервал:

Закладка:

Сделать

Похожие книги на «С++ для чайников .»

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


Отзывы о книге «С++ для чайников .»

Обсуждение, отзывы о книге «С++ для чайников .» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x