Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать

Int х, у, z; //Тривимірні координати

public:

kooClassO {х = у = z = 0;}

kooClass(int с, int d, int f) {x = с; у = d; z = f;}

kooClass operator*(kooClass obj); // Операнд obj передається неявно. kooClass operator=(kooClass obj); // Операнд obj передається неявно. kooClass operator++0; // Префіксна форма оператора інкремента"++"

// Постфіксна форма оператора інкремента"++" kooClass operator++(int notused);

// Префіксна форма унарного оператора зміни знаку kooClass operator-(); void Show(char*s);

};

// Перевизначення бінарного оператора множення kooClass kooClass: :operator*(kooClass obj)

{

kooClass tmp; // Створення тимчасового об'єкта

tmp.x = x * obj.x; // Операції множення цілочисельних значень

tmp.y = у * obj.y; // зберігають початковий вміст операндів

tmp.z = z * obj.z;

return tmp; // Повертає модифікований тимчасовий об'єкт

}

// Перевизначення оператора присвоєння "=". kooClass kooClass: :operator=(kooClass obj)

{

x = obj.x; // Операції присвоєння цілочисельних значень у = obj.y; // зберігають початковий вміст операндів z = obj.z;

// Повернення модифікованого об'єкта операнда, адресованого покажчиком return *this;

}

// Перевизначення префіксної форми унарного оператора інкремента"+ kooClass kooClass: :operator++0

{

х++; // Інкремент координат х, у і z

У++;

z++;

// Повернення модифікованого об'єкта операнда, адресованого покажчиком return *this;

}

// Перевизначення постфіксної форми унарного оператора інкремента kooClass kooClass::operator++(int notused)

{

kooClass tmp = *this; // Збереження початкового значення об'єкта х++; // Інкремент координат х, у і z

У++;

z++;

return tmp; // Повернення початкового значення об'єкта

}

// Перевизначення префіксної форми унарного оператора зміни знаку kooClass kooClass::operator-0 {

х=-х; // Зміна знаку координат х, у і z

у=-у;

z=-z;

// Повернення модифікованого об'єкта операнда, адресованого покажчиком return *this;

}

// Відображення тривимірних координат х, у, z. void kooClass: :Show(char*s)

{

cout«"Координати об'єкта <"« s «">:";

cout«"\t\tx=" « x «", y="« у «", z=" « z « endl;

}

Int mainO

{

kooClass ObjA(1, 2, 3), 0bjß(10,10,10), ObjC;

ObjA.ShowfA");

ObjB.Show("B");

ObjC = ObjA * ObjB; // Множення об'єктів ObjA і ObjB ObjC.Show("C=A*B");

ObjC = ObjA* ObjB* ObjC;//Множинне множення об'єктів ObjC.Show("C=A*B*C");

ObjC = ObjB = ObjA; // Множинне присвоєння об'єктів ObjC. Show("C=B");

ObjB.Show("B=A");

++ObjC; // Префіксна форма операції інкремента

ObjC.Show("++C");

ObjC++; // Постфіксна форма операції інкремента

ObjC.Show("C++");

ObjA = ++ObjC; // Об'єкт ObjA набуває значення об'єкта ObjC після його інкрементування. ObjA.ShowfA = ++С"); // Тепер об'єкти ObjA і ObjC мають однакові значення. ObjC.Show("C");

ObjA = ObjC++; // Об'єкт ObjA набуває значення об'єкта ObjC до його інкрементування. ObjA.Show("A=C++"); // Тепер об'єкти ObjA і ObjC мають різні значення. ObjC.Show("C");

-ObjC; // Префіксна форма операції зміни знаку

ObjC.Show("-C");

getchO; return 0;

}

Внаслідок виконання ця програма відображає на екрані такі результати:

Координати об'єкта <А>: x=1,y=2,z=3

Координати об'єкта <В>: х= 10, у= 10, z= 10

Координати об'єкта <С=А*В>: х= 10, у= 20, z= ЗО

Координати об'єкта <С=В> Координати об'єкта <В=А> Координати об'єкта <++С> Координати об'єкта <С++>

Координати об'єкта <С=А*В*С>: х= 100, у= 400, z= 900

х= 1, у= 2, г= З х= 1, у= 2, г= З х= 2, у= 3, т= 4 х= 3, у= 4, і- 5

Координати об'єкта <А=++С>: х= 4, у= 5, г= 6 Координати об'єкта <С>: х= 4, у= 5, г= 6

Координати об'єкта <А=С++>: х= 4, у= 5, г= 6 Координати об'єкта <С>: х= 5, у= 6, г= 7

Координати об'єкта <-С>: х= -5, у= -6, г= -7

Як підтверджують останні рядки результату виконання програми, при пре- фіксному інкрементуванні об'єкта ОЬІС його значення збільшується до виконання операції присвоєння об'єкту ОЬІА, при постфіксному інкрементуванні - після вико­нання операції присвоєння.

Нео! хідноапам ятати! Якщо символ "++" знаходиться перед операндом, то викликається операторна функція 0регаІ0Г++(), а якщо після операнда - то операторна функція 0рега(0Г++(/Л( ПОІизесІ). Аналогічний підхід використо­вується і для перевизначення префіксної та постфіксної форм оператора дек­ремента для будь-якого класу1.

Вартоа натиІаРанні версії мови С++ не містили відмінностей між префік- сною і постфіксною формами операторів інкремента і декремента. Раніше в обох випадках викликалася префіксна форма операторної функції. Це потрібно мати на увазі тоді, коли доведеться працювати із старими С++-програмами.