Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Перегрузка оператора присваивания

Оператор присваивания также является бинарным, но процедура его перегрузки имеет ряд особенностей:

- операторная функция оператора присваивания не может быть объявлена глобальной;

- операторная функция оператора присваивания не наследуется;

- компилятор может сгенерировать операторную функцию оператора присваивания, если она неопределенна в классе.

Оператор присваивания по умолчанию, сгенерированный компилятором выполняет по членное присваивание нестатических членов класса. Здесь такая же ситуация как и с генерируемым конструктором копирования по умолчанию: результат окажется неприемлемым, если класс содержит указатель

Левый операнд после выполнения оператора присваивания меняется, так как ему присваивается новое значение. Поэтому функция оператора присваивания должна возвращать ссылку на объект, для которого она вызвана (или которому присваивается значение), если мы хотим сохранить семантику оператора присваивания для встроенных типов данных. Проще всего это сделать, возвратив разыменованный указатель this. Это, кстати, позволяет использовать перегруженный оператор присваивания в выражениях вида: Р3=Р2=Р1.

 

class Tpoint

{

int x,y;

public:

Tpoint()

{

x=0;y=0;

printf("работал конструктор без параметров");

}

Tpoint(int xx, int yy)

{

x=xx; y=yy;

printf("работал конструктор с параметрами");

}

void pech();

Tpoint& operator=(Tpoint& P2);

~Tpoint()

{

printf("\n деструктор");

}

};

//=======================================

Tpoint& Tpoint::operator=(Tpoint& P2)

{

x=P2.x;

y=P2.y;

return *this;

}

//=======================================

void Tpoint::pech()

{

cout<<endl;

cout<< x <<" "<<y<<endl;

}

//=======================================

void main()

{

Tpoint a(1,2);

a.pech();

Tpoint b(10,20);

b.pech();

Tpoint c;

c=a;

c.pech();

cout<<endl;

c=b;

c.pech();

cout<<endl;

}


Рассмотрим пример, в котором объектами служат массивы и поля объявлены с помощью указателей. Учитывая вышеуказанные требования, в этом случае обязательно должен быть, использован конструктор копии.

В качестве задания рассмотрим организацию получения результата сложения поэлементно двух матриц.

<== предыдущая лекция | следующая лекция ==>
Перегрузка бинарных операторов | На экране
Поделиться с друзьями:


Дата добавления: 2014-01-03; Просмотров: 356; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.