입출력 오버로딩 질문이요
407
投稿した質問数 9
강의 4:48초에 나오는
friend std::ostream& operator << (std::ostream &out,const Point &point)
{
out << point.m_x << point.m_y << point.m_z ;
}
여기서 첫번째 파라미터가 point클래스가 아니라서 member function 으로 만들기가 어렵다고 하셨는데 의미를 잘 모르겠어서 구글링하고 생각해봤는데 맞는지 여쭤보고 싶어요
멤버 함수로 만들 수 없는 이유? 를 생각해보면
<< 연산자를 호출? 하는게 point 클래스 객체가 아니라서 인가요??
回答 2
5
멤버함수로 만드려면 왼쪽 피연산자 클래스에 만들어야 된다는 것을 알고 계실 것입니다.
(예를 들어 pt 객체가 Point 클래스 타입이라고 가정했을 때, pt + 3 뭐 이런 연산을 하고 싶다면 왼쪽 피연산자인 pt 의 클래스인 Point 내에 + 연산자 오버로딩 정의가 들어가야 한다는 것입니다. 즉 Point 의 멤버함수로서요! 이때 오른쪽 피연산자를 받을 매개변수는 int 가 되겠죠.)
입출력 연산자 << 의 왼쪽 피연산자는 ostream 클래스의 cout 객체입니다. cout << .... 이런 형태니까요!
그렇다면 << 를 멤버함수로서 오버로딩하기 위해선 ostream 클래스에서 멤버함수를 정의해주어야 한다는 이야기인데, ostream 은 C++ 에서 제공하는 표준 클래스이고 저희가 임의로 수정할 수가 없습니다.
그래서 입출력 연산자 오버로딩을 멤버함수로 만드는 것이 불가능하다는 것입니다.
그냥 전역함수로 오버로딩하면 왼쪽 피연산자에 ostream 객체를, 오른쪽 피연산자에 오버로딩할 대상 타입 객체를 받을 수 있도록 매개 변수 두개 설정하면 됩니다.
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
466
1
메모리 주소 10진수로 출력
1
653
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
499
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
534
1
메모리 주소에 관한 질분
0
679
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
549
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
443
1
Digit 뒤에 reference를 사용하는 이유
0
510
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
323
1
dat파일이...
0
539
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
644
1
복사 생성자 관련 질문이 있습니다.
0
454
1
수업 중 궁금한점이 있습니다.
1
390
1
라이브러리자체가 이해가 되지 않습니다.
0
561
1
마지막 예제 질문
0
302
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
375
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
411
1
friend함수 관련 질문이 있습니다.
0
312
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
447
1
3분 17초 질문
0
350
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
448
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
445
2
const Something &st에서 const를 빼면 안되나요?
0
300
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
493
1

