Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Artykuł o przeładowaniu operatorów

Ostatnio zmodyfikowano 2018-04-15 12:43
Autor Wiadomość
aram100
Temat założony przez niniejszego użytkownika
Artykuł o przeładowaniu operatorów
» 2018-04-15 11:01:58
Hej, nie rozumiem trochę tego tematu o przeładowywaniu operatorów.

Załóżmy, że generuję dynamiczną tablicę stringów:


C/C++
int rozmiar;
cin >> rozmiar;
string * wskaznik;
wskaznik = new string[ rozmiar ]


i teraz w pętli chcę wypełnić te tablicę stringami za pomocą operatora >>
Jak mam użyć tego przeładowania, aby dało to się zrobić?

C/C++
ostream & operator >>( ostream & wyjscie, const string & s, string * wsk ) {
    return wyjscie >> & s >> * wsk;
}

nie działa
P-170682
pekfos
» 2018-04-15 11:26:17
A jak twoim zdaniem ma działać operator o 3 argumentach?
P-170683
aram100
Temat założony przez niniejszego użytkownika
» 2018-04-15 12:32:18
No rzeczywiście głupotę zrobiłem. Szczerze mówiąc nie rozumiem za bardzo jak to działa
P-170685
YooSy
» 2018-04-15 12:43:04
_zwracany_typ_ & operator >>( const _zwracany_typ_ &, const _typ_ & );
Jak widać w prototypie operator>> definiowany poza klasą przyjmuje dwa argumenty.
Lewostronnie obiekt strumienia, który przekazujemy w pierwszym argumencie i prawostronny obiekt,
który przekazujemy jako drugi argument.

C/C++
#include <vector>
#include <iostream>

std::istream & operator >>( std::istream & is, std::vector < int >& v ) {
    for( auto & el: v ) {
        is >> el;
    }
    return is;
}

std::ostream & operator <<( std::ostream & os, std::vector < int >& v ) {
    for( auto const & el: v ) {
        os << el;
    }
    return os;
}

int main()
{
    std::vector < int > v( 3 ); // deklaracja tablicy o rozmiarze 3, trzeba nadać
    // aby vector miał jakiś rozmiar, ponieważ nie da się przekazać trzeciego argumentu
    // z rozmiarem
    std::cin >> v;
    std::cout << v;
}
P-170687
« 1 »
  Strona 1 z 1