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

Przeciążanie operatorów wejścia/wyjścia w języku C++

Object Storage Arubacloud
0 głosów
969 wizyt
pytanie zadane 7 marca 2020 w C i C++ przez Aragedens Obywatel (1,120 p.)
Siemka, jak przeciążyć operatory wejścia/wyjścia w c++? Nie chodzi mi o przeciążenie w klasie czy coś takiego.

1 odpowiedź

+1 głos
odpowiedź 7 marca 2020 przez Great Stary wyjadacz (12,300 p.)
wybrane 8 marca 2020 przez Aragedens
 
Najlepsza

Przykład:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

std::istream& operator>>(std::istream& in, std::vector<std::string>& vec) {
    std::string line;
    std::getline(in, line);
    std::istringstream iss(line);
    while (iss >> line) {
        vec.push_back(line);
    }
    return in;
}

std::ostream& operator<<(std::ostream& out, const std::vector<std::string>& vec) {
    for (std::size_t i = 0; i < vec.size() - 1; ++i) {
        out << vec[i] << '|';
    }
    return out << vec.back();
}

int main() {
    std::vector<std::string> vec;
    std::cin >> vec;
    std::cout << vec << std::endl;
}

Output:

Powierzchnia administracyjna Polski wynosi 312 696 km.
komentarz 8 marca 2020 przez Aragedens Obywatel (1,120 p.)
Dziękuję!
2
komentarz 8 marca 2020 przez niezalogowany

Jest najlepsza ale mimo wszystko może taki kodzik dodam, co prawda jest klasa dooble, skoro nie można przeciążać operatorów strumienia dla typów wbudowanych. Tak w "Opusie" chyba jest gdzieś napisane, ale chyba można stworzyć klasy by nie trzeba było przeciążać wszystkich operatorów po kolei (+, - ...). Mi tego bardzo brakowało, a przegapiłem tą informację wiec teraz się podzielę.

#include <iostream>
#include <cmath>

using namespace std;
struct dooble {
    double d;
    dooble (){d=0;}
    operator double () {
        return d;
    }
    dooble & operator = (const double & dd) {
        d=dd;
        return *this;
    }
};
///(cin)/////////////////////////////////////////////////////
istream & operator >> (istream &is,dooble &dd) {
    cout<<"\npodaj double: ";
    is>>dd.d;
    return is;
}
////////////////////////////////////////////////////////
int main() {

    dooble e;
    e=3.14;
    cout << pow(e,2)<< endl;
    cout << e-2*e<< endl;
    cout << e+e<< endl;

    double d=2;
    e=d;
    cout << pow(e,2)<< endl;
    cout << e-2*e<< endl;
    cout << e+e<< endl;

    cin>>e;
    cout << pow(e,2)<< endl;
    cout << e-2*e<< endl;
    cout << e+e<< endl;
    return 0;
}

 

komentarz 15 stycznia 2021 przez Eriss69 Gaduła (4,470 p.)

czy mozna przeciazyc operator tak aby

kod wygladal w mianie nastepuajco :
 

int main()
{
   std::vector<int> test;
   std::cin>> test;
   std::cout<<test;
}

czy trzeba uzywac push.back'a

komentarz 15 stycznia 2021 przez Great Stary wyjadacz (12,300 p.)
Można. W podobny sposób jak w odpowiedzi tylko prościej. Trzeba jakoś wstawić inty do vectora. Pytanie tylko do kiedy?
komentarz 17 stycznia 2021 przez Eriss69 Gaduła (4,470 p.)
jak to zrobic? napisabys ten kod ?
komentarz 17 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
std::vector<int> operator>>(std::vector<int>&& op, const int i) {
  op.push_back(i);
  return op;
}

 

komentarz 21 stycznia 2021 przez Eriss69 Gaduła (4,470 p.)
ten kod jest bledny
std::vector<int>xd;

std::cin>>xd; nope
komentarz 21 stycznia 2021 przez tkz Nałogowiec (42,000 p.)

Nie jest błędny...

#include <iostream>
#include <vector>

template <typename T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &vec)
{
    if (vec.size() != 0)
        for (const auto &i : vec)
            os << i << ' ';
    return os;
}

template <typename T>
std::istream &operator>>(std::istream &is, std::vector<T> &vec)
{
    T temp;
    is>>temp;
    vec.push_back(temp);
    return is;
}

std::vector<int> operator>>(std::vector<int>& op,  int i) {
  op.push_back(i);
  return op;
}

int main()
{
    std::vector<int>vec;
    std::cin>>vec>>vec>>vec;
    vec>>4;
    std::cout<<vec;
}

 

Podobne pytania

+1 głos
1 odpowiedź 844 wizyt
0 głosów
1 odpowiedź 205 wizyt
0 głosów
1 odpowiedź 453 wizyt

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,937 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...