• 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++

0 głosów
1,630 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,660 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,660 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,040 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,040 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ź 1,130 wizyt
0 głosów
1 odpowiedź 514 wizyt
0 głosów
1 odpowiedź 828 wizyt

93,692 zapytań

142,611 odpowiedzi

323,220 komentarzy

63,220 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.

...