Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

C


Index » educatie » » informatica » C
» Supraincarcarea operatorilor


Supraincarcarea operatorilor


Supraincarcarea operatorilor

Limbajul C++ permite ca actiunea operatorilor sa fie redefinita pentru noi tipuri de date. De exemplu putem defini clasa matrice, si operatorii si , care sa efectueze adunarea si produsul a 2 matrici. Codul care ar face adunarea intre 2 matrici ar arata exact ca si adunarea intre 2 numere:

Matrice a,b,suma,produs;

//populare a si b



suma = a + b;

produs = a * b;

Pentru a suprascrie un operator ca sa poata fi aplicat asupra claselor, trebuie sa definim functiile operator. Functiile operator sunt functii obisnuite, cu numele format din cuvantul cheie operator urmat de simbolul operatorului. De exemplu operator+( . )

Mai jos este prezentat un exemplu care suprascrie operatorul de adunare (+). Vom crea o clasa care stocheaza vectori bidimensionali, si vom aduna 2 vectori: a(3,1) si b(1,2). In vectorul suma rezultat, coordonata x va fi egala cu suma coordonatelor x a vectorilor operanzi, iar y - suma coordonatelor y a vectorilor operanzi. In acest caz rezultatul va fi

// vectori: exemplu de suprascriere a operatorului +

#include<iostream>

#include<conio.h>

using namespace std;

class Vector ;

Vector (int,int);

Vector operator + (Vector);

Vector::Vector (int x, int y)

Vector Vector::operator+ (Vector param)

int main ()

Metoda operator+ din clasa Vector realizeaza suprascrierea operatorului de adunare (+). Aceasta metoda poate fi apelata atat implicit folosind simbolul +, cat si explicit, folosind numele functiei:

c = a + b;

c = a.operator+ (b);

Ambele expresii sunt echivalente.

Functiile operator pot fi definite atat ca metode membre (ca in exemplul de mai sus) cat si sub forma de functii globale. In cazul in care sunt definite ca metode, operandul din stanga va fi obiectul pentru care este apelata functia operator, iar operandul din dreapta va fi transmis ca parametru. In cazul in care functia operator este globala, aceasta va avea 2 parametri reprezentand cei doi operanzi. si operatorii unari, gen ++, pot fi suprascrisi.

In tabelul de mai jos este prezentat modul cum pot fi declarate diverse functii operator (Inlocuiti @ cu operatorul in fiecare caz):

Expresie

Operator

Metoda

Functie globala

@a

+ - * & ! ~ ++ --

A::operator@()

operator@(A)

a@

A::operator@(int)

operator@(A,int)

a@b

+ - * / % ^ & | < > == != <= >= << >> && || ,

A::operator@ (B)

operator@(A,B)

a@b

= += -= *= /= %= ^= &= |= <<= >>= []

A::operator@ (B)






Politica de confidentialitate




Copyright © 2024 - Toate drepturile rezervate