overload insertion and extraction operator in c++ code example
Example 1: overload input operator c++
#include <iostream>
using namespace std;
class Distance {
private:
int feet;
int inches;
public:
Distance() {
feet = 0;
inches = 0;
}
Distance(int f, int i) {
feet = f;
inches = i;
}
friend ostream &operator<<( ostream &output, const Distance &D ) {
output << "F : " << D.feet << " I : " << D.inches;
return output;
}
friend istream &operator>>( istream &input, Distance &D ) {
input >> D.feet >> D.inches;
return input;
}
};
int main() {
Distance D1(11, 10), D2(5, 11), D3;
cout << "Enter the value of object : " << endl;
cin >> D3;
cout << "First Distance : " << D1 << endl;
cout << "Second Distance :" << D2 << endl;
cout << "Third Distance :" << D3 << endl;
return 0;
}
Example 2: insertion and extraction operator overloading in c++
std::ostream& operator<<(std::ostream& out, const Bigint& i){
for(auto b = i.m_digits.begin(); b != i.m_digits.end(); ++b){
out<<(*b);
}
return (out);
}
std::istream& operator>>(std::istream& in, Bigint& i) {
char c;
in.get(c);
if (c == '-') i.m_is_negative = true;
else {
if (! std::isdigit(c)) throw std::runtime_error("Invalid input");
i.m_digits.emplace_front(c);
}
while (in.get(c) && (c != 0xa)) {
if (! std::isdigit(c)) throw std::runtime_error("Invalid input");
i.m_digits.emplace_front(c);
}
i.m_digits.reverse();
while(i.m_digits.front()=='0'&&i.m_digits.size()!= 1){
i.m_digits.pop_front();
if(i.m_digits.size()== 1)
break;
}
return in;
}