суббота, 5 декабря 2009 г.

6.16. Присваивание побитовым копированием по умолчанию







Для присваивания объекта другому объекту того же типа используется операция присваивания (=). Такое присваивание обычно выполняется с по­мощью побитового копирования: каждый элемент объекта копируется ин­дивидуально в такой же элемент другого объекта (смотри рис. 6.12). (Заме­чание: побитовое копирование может вызвать серьезные проблемы, когда при­меняется к классу, чьи данные-элементы используют динамическое распределение памяти; в главе 8 «Перегрузка операций» мы обсудим эти проблемы и покажем, как их решать.)
Объекты могут передаваться как аргументы функций и могут возвра­щаться из функций. Такие передача и возвращение выполняются по умол­чанию вызовом по значению, т.е. передается или возвращается копия объекта (мы представим несколько примеров в главе 8 «Перегрузка операций»).


// FIG6_12.CPP
// Демонстрация присваивания одного объекта другому //с использованием побитового копирования по умолчанию
#include
// Простой класс Date class Date { public:
Date(int = 1, int = 1, int = 1990);     // конструктор
// с умолчанием
void print (); private:
int month; int day; int year;
// Простой конструктор Date без проверки диапазонов
Date::Date(int m, int d, int y)
{
month = m; day = d; year = y;
// Печать Date в форме mm-dd-yyyy void Date::print ()
{ cout << month << '-' << day <<   << year; }
main ( ) {
Date datel(7, 4, 1993), date2;     
    //d2 по умолчанию
// равен 1/1/90
cout << "datel = ";
datel.print();
cout << endl « "date2 = ";
date2.print();
date2 = datel; //присваивание побитовым копированием
// по умолчанию cout << endl << endl
<< "После побитового копирования по умолчанию date2 = "; date2.print (); cout << endl;
return 0;
datel = 7-4-1993

date2 = 1-1-1990
После побитового копирования no умолчанию date2 = 7-4-1993


Рис. 6.12. Присваивание одного объекта другому с использованием побитового копирования

по умолчанию
Совет по повышению эффективности 6.4
Передача объекта вызовом по значению хороша с точки зрения безопасности, по скольку вызываемая функция не имеет доступа к исходному объекту, но вызов по значению может ухудшить производительность в случае создания копии большого объекта. Объект может быть передан вызовом по ссылке путем передачи либо указателя, либо ссылки на объект. Вызов по ссылке способствует хорошей произ водительности, но с точки зрения безопасности хуже предыдущего, поскольку функ ции предоставлен доступ к исходному объекту. Безопасной альтернативой является вызов со ссылкой const.


Комментариев нет:

Отправить комментарий