I’m starting to get a grasp of operator overloading but I’ve hit a wall. I cant figure out how I would make ‘<<‘ work the way it is redefined to work with more than one type of object from my class. I have to use one of my class constructors to initialize two separate matrices so I need to make two different objects like so: matrix a(sizeIn, rangeIn), b(sizeIn, rangeIn); but as you can see below my ‘<<‘ overloading function only uses one class parameter. Can anyone help me out?
ostream & operator << (ostream & os, const matrix & a)
{
for (int i = 0; i < a.size; i++)
{
cout << '|';
for (int j = 0; j < a.size; j++)
{
os << setw(4) << a.array[i][j] << " ";
}
os << setw(2) << '|' << endl;
}
return os;
}
This will work with more than one object because the
<<overload returns a reference to the stream.<<is evaluated1 left to right, so if you do:it is equivalent to:
now, since your
(stream << a)function returns anostream&, we could think of this as:and so on 🙂
1: technically, it ‘associates’ left to right, leading to left-to-right evaluation.