Supraоnc; оператори за таксуване

Претоварването на оператора позволява използването на оператори на стандартен език за техните собствени класове. Това може да стане чрез дефиниране на функции със специално име (с помощта на оператора на ключова дума).

supraоnc

Има някои ограничения при претоварването на операторите:

  • основните характеристики на операторите не могат да бъдат модифицирани (приоритет, посока на оценка, асоциативност, мощност)
  • не могат да бъдат въведени нови оператори в сравнение със съществуващите в езика
  • операторите не могат да бъдат претоварени за основни типове
  • операторите не могат да бъдат претоварени. . *:? и размер на

Операторите могат да бъдат претоварени от функции на членове в класната стая или от нормални функции. Ако се използват членски функции, броят на функционалните параметри е с 1 по-малък от мощността на оператора (първият операнд се счита за указател на този ).

За подробности вижте „Обектно-ориентирано програмиране на език C ++“ на страници 52-78.

Изградете клас за колекция съхранявани като обикновен верижен списък за съхраняване на цели числа, за да позволят основните операции да се извършват с помощта на оператори и да позволят колекцията да бъде обходена с помощта на итератор. Напишете основна програма, за да демонстрирате функционирането на класа.

За да го разрешим, ще са ни необходими три класа:

  • основният клас, наречен Колекция който съдържа изпълнението на операциите
  • частен клас Кимване (включено в класа за събиране), който съдържа данни за възел в списъка
  • Клас на итератор (включен в колекционния клас), което позволява изброяването на елементите на колекцията

C ++ изпълнение на класове и основната тестова програма:

* Прилага колекция от цели числа като списък

struct Node; // Съобщение за клас на възел (за Iterator)

Collection (): head (NULL) <> // конструктор по подразбиране

Колекция (const Collection & c) // конструктор за копиране

// преминете през колекцията с итератор

за (Iterator i = c.Start (); i! = c.End (); i ++)

// и добавяме възлите в нашата колекция

const Collection & оператор = (const Collection & c)

за (Iterator i = c.Start (); i! = c.End (); i ++)

// операторът за директен достъп до елементи

int & operator [] (int k) const

// приемаме, че индексът е вътре в колекцията

void Добавяне (int стойност) // добавяне на елемент в края

// случай 2: списъкът не е празен

const Collection & оператор + = (стойност int)

void Insert (int poz, int val) // вмъкване на елемент

// случай 1: вмъкване в началото на колекцията

// случай 2: вмъкване вътре в колекцията

// търсим позицията за вмъкване

p-> Next = нов възел (val, p-> Next);

void Изтрий (int pos) // изтрий елемента от посочената позиция

// случай 1: изтриване в началото на колекцията

// случай 2: изтриване от вътре в колекцията

void EmptyCollection () // изтриване на всички елементи в колекцията

const Collection & оператор + = (const Collection & c)

за (Iterator i = c.Start (); i! = c.End (); i ++)

const Collection оператор + (const Collection & c)

за (Iterator i = c.Start (); i! = c.End (); i ++)

int ElementNumber () const // получаваме броя на елементите