c++ cout ... ostream& 에 관한 질문 간단한 내용입니다.

gyxor의 이미지

#include<iostream>
using namespace std;

class tri {
    private :
     int x;
        int y;
    public :
 tri (int a,int b);
 friend ostream& operator<< (ostream& os,tri m);

};
tri:: tri (int a,int b)
{
    x = a;
    y = b;
}
ostream& operator<< (ostream& os,tri m)
{
   os <<"x= "<< m.x << "  y = " <<m.y << endl ;
   return os;
}
void main()
{
      tri a(10,20);
      tri b(30,40);
      cout << a  << b;
}

/*
friend ostream& operator<< (ostream& os,const tri &m);
아래와 같이 고치면 왜 에러가 나는 것인지 궁금합니다.
friend ostream operator<< (ostream& os,const tri &m);
friend ostream& operator<< (ostream os,const tri &m);

ostream 객체는 무조건 참조로 선언해야하고 복사할수 없기 때문인가요?
답변부탁드립니다.

*/

cinsk의 이미지

int foo(int &i);
int foo(int i);

위 두 함수는 구별할 수 없습니다. function overloading을 쓰려면 함수가 구별가능(인자값이 타입이 달라야함)해야 하는데, reference로 선언된 것들은 non-reference로 선언된 것과 호출 시 구별할 수 없기 때문입니다.