[c++]Przeciążenie: operator==,jak to zrobić?


(O2350695) #1

Hej, mam problem z przeciązeniem operatora == (właściwie nie wiem jak).

2 //ilosc operacji

1 //dodanie

a //nazwa

1 //ilosc fanow

1 //dodanie aktora

a //te same dane

1 //te same dane

 

powinno zostać wyświetlone info: NIE juz jest taki sam

 

Czyli chcę przeciążyć operator żeby sprawdzał mi 2 obiekty czy liczba fanów i nazwa są takie same jeśli tak to niech wyświetli "NIE juz jest taki sam"

#includeiostream
#includestdio.h
#includestring

using namespace std;

int liczbaoperacji;
int operacja;
int liczbafanow;
int ilemaxmoznastracic;
string dane;

class Aktor
{
public:
    string dane;
    int liczbafanow;
    Aktor * next;
    Aktor * prev;
    Aktor();

};
Aktor::Aktor()
{
    next = NULL;
    prev = NULL;
}


bool operator== ( Aktor a, Aktor b )
{
    return a.liczbafanow == b.liczbafanow a.dane == b.dane;
}


class Lista
{
public:
    Aktor * head;
    Aktor * tail;
    Lista();
    bool IsEmpty();
    void Add(Aktor *nowy);
};

Lista::Lista() //konstruktor
{
    head = NULL;
    tail = NULL;
}

bool Lista::IsEmpty()
{
    if (head==NULL tail==NULL)
        return true;
    else
        return false;
}


void Lista::Add(Aktor *nowy)
{

    if(IsEmpty()) //gdy pusta ....pierwszy,ostatni, gdzies w srodku
    {
        tail=nowy;
        head=nowy;
        printf("TAK pierwszy element\n");
        return; //wyjdz z funkcji
    }
    Aktor *tymczasowy = head;
    if(nowy==tymczasowy)
    { //nie dodawaj jesli taki sam jest w liscie, a w liscie jest tylko 1 element
        printf("NIE juz jest taki sam\n");
        return;
    }
}

int main()
{
    //ios_base::sync_with_stdio(0);
    Lista nowalista;
    scanf("%d",liczbaoperacji);
    for(int i=0;iliczbaoperacji;++i)
    {
        scanf("%d",operacja);
        if(operacja==1) //dodanie aktora
        {
            Aktor *nowyaktor = new Aktor;
            getline(cin, dane);
            getline(cin, dane);
            scanf("%d",liczbafanow);
            nowyaktor-dane=dane;
            nowyaktor-liczbafanow=liczbafanow;
            nowalista.Add(nowyaktor);
        }

    }

    return 0;
}

#2

 

honduss, proszę zapoznaj się z tą stroną oraz tym tematem, a następnie, używając opcji EDYTUJ , później Użyj pełnego edytora , popraw tytuł tematu, tak aby mówił konkretnie o problemie.

Poza tym, na forum używamy polskich znaków (ż, ł, ć, ś, ą itp.). Proszę wyedytować swojego posta i poprawić co trzeba.

W przypadku zignorowania prośby temat poleci do śmietnika.


(Copycona) #3
void Lista::Add(Aktor *nowy)
Aktor *tymczasowy = head;

Zmienne “nowy” i “tymczasowy” są typu Aktor *, a przeciążasz operator porównania na typ Aktor.

 

if(nowy==tymczasowy)

To jest więc porównanie wskaźników (adresów).

Po dokonaniu dereferencji

if(*nowy == *tymczasowy) {

komunikat jest wyświetlany.


(O2350695) #4

dzięki śliczne :slight_smile:


([alex]) #5

A czy nie było na dole dopisane że bez użycia STL ?