• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeciążanie operatorów w klasie

0 głosów
292 wizyt
pytanie zadane 23 września 2024 w C i C++ przez HUBSON2912 Obywatel (1,560 p.)

Witam,

zacząłem się bawić w klasy w C++. W ramach treningu napisałem swój wektor. Chciałem przeciążyć operator[] w taki sposób, żebym mógł pisać np.

vec[i]=vec[i-1]+3

Dotychczas zwracałem wartość tablicy w indeksie i, ale w takim wypadku nie działa przypisanie do indeksu. Nie wiem jak zrobić by raz vec[i] dawało element jaki przechowuje wektor, a raz wskaźnik na element by można było przypisać wartość.

W skrócie, mój kod wygląda tak:

template <typename Typ> class Wektor
{
    Typ *content;  //zawartosc
    int capacity;  //maksymalna pojemnosc
    int current;  //indeks ostatniej komorki+1

public:
    Wektor();
    ~Wektor();
    Typ get(int index);  //zwraca content[index]
    void push_back(int val);
    
    Wektor& operator=(Wektor& other);  //i to dziala jak powinno

    Typ operator[](int i)
    {
        if(i>=size())  //jesli jest ponad zakresem to blad
            exit(0);
        return get(i);  //zwroc wartosc
    }
}

 Z góry dzięki za pomoc.

komentarz 23 września 2024 przez Oscar Nałogowiec (29,360 p.)
O ile dobrze pamiętam raz musi być zwykła referencja (l-value) zwracana a w drugim przypadku const-referencja (i operator być const). Może oczywiście być zaimplementowany tylko pierwszy przypadek, gdy "obsługuje" oba kierunki.

1 odpowiedź

+2 głosów
odpowiedź 23 września 2024 przez WojAbuk Gaduła (3,460 p.)
wybrane 23 września 2024 przez HUBSON2912
 
Najlepsza
Czy na pewno chcesz go przeciążyć? Wydaje mi się że tu raczej chcesz zwrócić referencje na element zawsze. https://en.cppreference.com/w/cpp/container/vector/operator_at
komentarz 23 września 2024 przez adrian17 Mentor (354,880 p.)
Przeciążanie jest poprawne (nie może „nie chcieć” go przeciążyć jeśli chce móc używać []), ale masz rację że powinien zwracać referencję.

Podobne pytania

0 głosów
1 odpowiedź 514 wizyt
+1 głos
0 odpowiedzi 668 wizyt
0 głosów
1 odpowiedź 831 wizyt

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,224 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...